Показать всплывающее окно с выцветшим фоновым окном WPF
я хочу показать всплывающее окно с выцветшим фоновым окном wpf
Что я уже пробовал:
owner.Opacity = 0.2; if (showAsDialog) oWindow.ShowDialog(); else { oWindow.Show(); }
owner.Opacity = 0.2; if (showAsDialog) oWindow.ShowDialog(); else { oWindow.Show(); }
public void Progress_Close(Window oWindow, Window owner = null) { try { Application.Current.Dispatcher.Invoke(new Action(() => { Window wndParent = owner; try { if (wndParent == null) { wndParent = Application.Current.MainWindow; } if (wndParent != null) { //if (!WindowHelper.IsOtherWindowsOpen()) { wndParent.Opacity = 1; wndParent.Effect = null; } } if (oWindow.Visibility != Visibility.Visible) return; if (!oWindow.IsVisible) { return; } //wndParent = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); if (oWindow == null || !oWindow.IsVisible) return; oWindow.Hide(); } catch (Exception ex) { //Log.Error("MainWindow \t mnuAbout_Click \t {error}", ex); } })); } catch (Exception ex) { cGlobalSettings.oLogger.WriteLogException("Progress_Close:: ", ex); } } public void Progress_Show(Window oWindow, Window owner = null, bool showAsDialog = true) { try { if (oWindow == null) { return; } this.Dispatcher.Invoke(new Action(() => { //Window wndParent = owner; try { if (owner == null) { owner = Application.Current.MainWindow; } //wndParent = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); owner.Opacity = 0.2; owner.Effect = new System.Windows.Media.Effects.BlurEffect(); oWindow.ShowInTaskbar = false; oWindow.Owner = owner; oWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; //if (this.WindowState != WindowState.Maximized) { oWindow.Left = Application.Current.MainWindow.Left + (this.ActualWidth - oWindow.ActualWidth) / 2; oWindow.Top = Application.Current.MainWindow.Top + (this.ActualHeight - oWindow.ActualHeight) / 2; } if (showAsDialog) oWindow.ShowDialog(); else { oWindow.Show(); } } catch (Exception ex) { //Log.Error("MainWindow \t mnuAbout_Click \t {error}", ex); } finally { if (owner != null) { if (showAsDialog && !(owner == Application.Current.MainWindow /*&& IsOtherWindowsOpen()*/)) { owner.Opacity = 1; owner.Effect = null; owner.Activate(); } } } })); } catch (Exception ex) { cGlobalSettings.oLogger.WriteLogException("Progress_Show:: ", ex); } } and call above function like this private void LoadAboutForm() { try { this.Dispatcher.Invoke(new Action(() => { //MainTabControl.SelectedIndex = 0; ofrmAbout = new frmAbout(); ofrmAbout.OnCloseWindow += OfrmAbout_OnCloseWindow; Progress_Show(ofrmAbout, Application.Current.MainWindow, true); })); } catch (Exception ex) { cGlobalSettings.oLogger.WriteLogException("MainUserControl.xaml.cs|TabItem_MouseUp()", ex); } } private void OfrmAbout_OnCloseWindow() { if (ofrmAbout != null) { Progress_Close(ofrmAbout, Application.Current.MainWindow); } }
Если вы хотите обновить свой вопрос, нажмите на зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос. НЕ опубликуйте свое обновление как "решение".
И первое, что вы захотите сделать, когда будете редактировать свой вопрос, - это на самом деле задавать вопрос До сих пор вы говорили нам, что вы пытаетесь сделать, и показали нам некоторый код; но вы не сказали нам, в чем проблема, или где вы застряли.