如何在WinForm应用程序中以编程方式创建一个WPF窗口

12

我有一个现有的WinForm应用程序,目前转移到WPF太过繁琐。

但是,我需要一个具有一些棘手透明行为的窗口,在WinForm中无法实现(是的,尝试过Layerd Windows但不起作用)。

WPF可以美观简单地实现我需要的透明度行为。

当然我已经谷歌过了,但只能找到如何在WinForm中创建WPF控件的提示,但这不是我所需要的。我需要一个完全独立于其他表单的单独的WPF窗口。

WPF窗口将是一个相当简单的全屏和无边框叠加窗口,在其中我将进行一些简单的绘画,每个图形都具有不同的透明度。

我如何在WinForm应用程序中创建一个WPF窗口?


请查看我的回答:https://dev59.com/cWsy5IYBdhLWcg3wzBF4#32691690 - Andrea Antonangeli
2个回答

19
将必要的WPF引用添加到您的项目中,创建一个WPF Window实例,调用EnableModelessKeyboardInterop并显示窗口。
调用EnableModelessKeyboardInterop确保您的WPF窗口将从Windows Forms应用程序获取键盘输入。
要注意的是,如果在WPF窗口内打开新窗口,则键盘输入将无法路由到此新窗口。 您必须为这些新创建的窗口也调用EnableModelessKeyboardInterop
对于您的其他要求,请使用Window.TopmostWindow.AllowsTransparency。 不要忘记将WindowStyle设置为None,否则不支持透明度。
更新: 以下引用应添加以在windows forms应用程序中使用WPF:
  • PresentationCore
  • PresentationFramework
  • System.Xaml
  • WindowsBase
  • WindowsFormsIntegration

8

这是经过测试的解决方案。此代码可在WinForm或WPF应用程序中使用,无需任何XAML。

#region WPF
// include following references:
//   PresentationCore
//   PresentationFramework
//   WindowsBase

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
 #endregion


public class WPFWindow : Window
{

    private Canvas canvas = new Canvas();

    public WPFWindow()
    {
        this.AllowsTransparency = true;
        this.WindowStyle = WindowStyle.None;
        this.Background = Brushes.Black;
        this.Topmost = true;

        this.Width = 400;
        this.Height = 300;
        canvas.Width = this.Width;
        canvas.Height = this.Height;
        canvas.Background = Brushes.Black;
        this.Content = canvas;
    }
}

窗口背景完全透明。您可以在画布上绘制,每个元素都可以拥有自己的透明度(您可以通过设置用于绘制它的画笔的 alpha 通道来确定透明度)。只需使用类似以下代码调用窗口即可:
WPFWindow w = new WPFWindow();
w.Show();

1
请注意,您可以使用Brushes.Black代替new SolidColorBrush( Color.FromArgb(0,0,0,0) ) - Ohad Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接