[英]WPF Bluring main form when showing dialogs
所以我在主要形式的主网格上添加了模糊效果:
<Grid.Effect>
<BlurEffect x:Name="MainGridBlur" Radius="0" KernelType="Gaussian"/>
</Grid.Effect>
并添加了用于在主窗体上打开对话框的自定义方法:
public Window CreateDialogWindow(Window window)
{
window.Owner = this;
window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
MainGridBlur.Radius = 10;
window.ShowDialog();
MainGridBlur.Radius = 0;
return window;
}
这是我在创建对话框时从其他形式调用此方法的方式:
((MainWindow)Application.Current.MainWindow).CreateDialogWindow(new SomeDialog());
我的问题是,有什么更好的方法吗?
好的,这个答案太迟了,但是总比没有好,对吧? 我设法通过捕获WndProc消息WM_SETFOCUS和WM_KILLFOCUS并在WM_KILLFOCUS上模糊化表单并在WM_SETFOCUS上消除模糊(??)来做到这一点。
using System.Windows.Interop;
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case 8: //WM_KILLFOCUS
MainGridBlur.Radius = 10;
break;
case 7: //WM_SETFOCUS
MainGridBlur.Radius = 0;
break;
}
return IntPtr.Zero;
}
希望这对某人有帮助。
编辑。 我只是意识到我可以使用Got / LostKeyboardFocus事件来实现相同的功能,下面是一个示例:
private void Main_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
MainGridBlur.Radius = 0;
}
private void Main_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
MainGridBlur.Radius = 10;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.