srilekhamenon Ответов: 1

Показать всплывающее окно с выцветшим фоновым окном WPF


я хочу показать всплывающее окно с выцветшим фоновым окном wpf

Что я уже пробовал:

owner.Opacity = 0.2;
if (showAsDialog)
                            oWindow.ShowDialog();
                        else
                        {
                            oWindow.Show();
                        }

1 Ответов

Рейтинг:
0

srilekhamenon

 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);
            }
        }


Richard Deeming

Если вы хотите обновить свой вопрос, нажмите на зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос. НЕ опубликуйте свое обновление как "решение".

И первое, что вы захотите сделать, когда будете редактировать свой вопрос, - это на самом деле задавать вопрос До сих пор вы говорили нам, что вы пытаетесь сделать, и показали нам некоторый код; но вы не сказали нам, в чем проблема, или где вы застряли.