是否可以在 HwndHost 中托管 WPF 页面?
Is it possible to Host a WPF Page in HwndHost?
首先,这可能感觉是一个愚蠢的问题(您可以直接在 WPF window 中加载 WPF 内容),但实际上阅读完整描述以了解我为什么需要这个.
我正在开发一个 C# WPF 应用程序来模拟 Windows 亚克力模糊效果。我正在使用此处的示例代码:Win32 Composition Samples.
使用此代码,我能够在 HwndHost
上或直接在 Window 上创建丙烯酸模糊。但这会导致 Windows 航空航天问题,这意味着我在 window 上绘制的所有控件都将出现在 AcrylicBlur(模糊)下。喜欢这个 :
Acrylic 内容与我的 WPF 按钮重叠
所以我决定创建一个具有亚克力效果的 window 并创建一个 HwndHost
作为 window 的子级,这样我就可以将 WPF 内容重叠在亚克力之上模糊以使 WPF 控件不会变得模糊。
可能有效的解决方案
还有一个我可以尝试的概念,就是创建两个 windows 一个用 Acrylic 和一个用 WPF 并在那里分享 WM_POSITIONCHANGED
两者的消息 window这会导致 windows 平均移动和调整大小。但这有几个问题。
找到一种托管 WPF 页面的方法,而不是使用 HwndHost,我使用 HwndSource。
HwndSourceParameters param = new HwndSourceParameters("Host");
param.PositionX = 10;
param.PositionY = 10;
param.Width = 500;
param.Height = 500;
param.ExtendedWindowStyle +=0x00200000; //This style creates a transparent window
param.WindowStyle = 0x10000000;
HwndSource src = new HwndSource(param);
src.SizeToContent = SizeToContent.WidthAndHeight;
src.CompositionTarget.BackgroundColor = Colors.Transparent;
src.RootVisual = new Page1(); //Your Page Here
首先,这可能感觉是一个愚蠢的问题(您可以直接在 WPF window 中加载 WPF 内容),但实际上阅读完整描述以了解我为什么需要这个.
我正在开发一个 C# WPF 应用程序来模拟 Windows 亚克力模糊效果。我正在使用此处的示例代码:Win32 Composition Samples.
使用此代码,我能够在 HwndHost
上或直接在 Window 上创建丙烯酸模糊。但这会导致 Windows 航空航天问题,这意味着我在 window 上绘制的所有控件都将出现在 AcrylicBlur(模糊)下。喜欢这个 :
Acrylic 内容与我的 WPF 按钮重叠
所以我决定创建一个具有亚克力效果的 window 并创建一个 HwndHost
作为 window 的子级,这样我就可以将 WPF 内容重叠在亚克力之上模糊以使 WPF 控件不会变得模糊。
可能有效的解决方案
还有一个我可以尝试的概念,就是创建两个 windows 一个用 Acrylic 和一个用 WPF 并在那里分享 WM_POSITIONCHANGED
两者的消息 window这会导致 windows 平均移动和调整大小。但这有几个问题。
找到一种托管 WPF 页面的方法,而不是使用 HwndHost,我使用 HwndSource。
HwndSourceParameters param = new HwndSourceParameters("Host");
param.PositionX = 10;
param.PositionY = 10;
param.Width = 500;
param.Height = 500;
param.ExtendedWindowStyle +=0x00200000; //This style creates a transparent window
param.WindowStyle = 0x10000000;
HwndSource src = new HwndSource(param);
src.SizeToContent = SizeToContent.WidthAndHeight;
src.CompositionTarget.BackgroundColor = Colors.Transparent;
src.RootVisual = new Page1(); //Your Page Here