Как затемнить всю область экрана и осветить открытое окно в WPF?

Как в WPF затемнить всю область экрана при открытии нового окна?

Также после закрытия окна, как мне отменить временный эффект?


person hamed aj    schedule 23.12.2010    source источник
comment
Вы можете проверить эту ссылку: stackoverflow.com/questions/5825527/   -  person swapnil saha    schedule 21.07.2016


Ответы (4)


Вы можете создать фоновое прозрачное окно следующим образом:

var darkwindow = new Window() {
                            Background = Brushes.Black,
                            Opacity = 0.4,
                            AllowsTransparency = true,
                            WindowStyle = WindowStyle.None,
                            WindowState = WindowState.Maximized,
                            Topmost = true
                        };
darkwindow.Show();
MessageBox.Show("Hello");
darkwindow.Close();

и замените MessageBox.Show("Hello"); на mywindow.ShowModal();. Возможно, вам нужно сделать mywindow всегда на вершине.

Изменить

Не используйте darkwindow.Hide () вместо Close ().

person Mykola Bogdiuk    schedule 24.12.2010
comment
спасибо Николай Богдюк. Я создаю темную прозрачную рамку над окном, а затем показываю новое окно - person hamed aj; 28.12.2010

Вот моя версия, если вы хотите сделать серым и размыть родительское окно:

private void btnOpenSettings_Click(object sender, RoutedEventArgs e)
    {
        // settings for the parent window
        // set the transparency to the half
        this.Opacity = 0.5;
        // blur the whole window
        this.Effect = new BlurEffect();

        // Set the options for the settings (child) window
        SettingsForm wdwSettings = new SettingsForm() 
        { 
            Owner = this,
            ShowInTaskbar = false,
            Topmost = true
        };

        // Open the child window
        wdwSettings.ShowDialog();

        //restore Opacity and remove blur after closing the child window
        this.Opacity = 1;
        this.Effect = null;
    }
person Smolla    schedule 03.02.2013
comment
он отлично работает, но как я могу вернуться в исходное состояние после закрытия ShowDialog ()? - person Mugiwara; 12.04.2018
comment
Ничего страшного :) this.Effect = null; возвращает его в нормальное состояние - person Mugiwara; 12.04.2018

Уменьшить непрозрачность текущего окна,

Например:

{
    this.Opacity = 0.5;//Decrease opacity
    MessageBox.Show("Ur Window Darken");
    this.Opacity = 100;//Reset the opacity
}
person Satish R    schedule 14.06.2017
comment
Простое решение - person YoungStacker; 24.10.2017

Самый простой способ: используйте всплывающее окно XAML, как описано ниже.

<Popup x:Name="pop" IsOpen="False" >

</Popup> 

Для получения более подробной информации перейдите по ссылке ниже. http://www.c-sharpcorner.com/UploadFile/mahesh/using-xaml-popup-in-wpf/

После этого, чтобы размыть основную сетку в обработчике событий для события, которое показывает всплывающее окно, установите прозрачность, как показано в коде C # ниже.

if (pop.IsOpen == false)    
{    
pop.IsOpen = true;    
grdMain.Opacity = 0.4;    
}    
else    
{    
pop.isopen=false;    
}    
person Ashish Sahu    schedule 13.03.2015