在透明的Windows.Form中托管WPF UserControl

时间:2013-11-29 12:52:17

标签: c# wpf winforms transparency elementhost

我需要将我的WPF USerControl插入Windows.Form。这是我的控制:

<UserControl x:Class="WpfControlLibrary1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Background="Transparent">

    <InkCanvas x:Name="Ink" Background="Transparent" />

</UserControl>

要托管此控件,我使用ElementHost对象作为我的表单的唯一控件。我需要有可能执行以下操作:当我将窗体的不透明度设置为0时,为了使其不可见,我需要继续使用所有Children和{{1}的不透明度我的Strokes到1(所以我可以看到它们)。

我尝试使用InkCanvas属性,但它似乎不适用于TransparencyKey。如何解决此问题,如何在Form和UserControl之间设置不同的不透明度?

3 个答案:

答案 0 :(得分:1)

无法作为WPF使用的AFAIK使用子像素alpha渲染,例如winform无法使用

希望这个帮助

答案 1 :(得分:1)

如果要托管在Win Forms上透明运行的WPF控件,请按照以下步骤操作

  • 创建WPF用户控件并设置background =“transparent”。

  • 创建没有控件的Win用户控件并编写以下内容 代码在其后端:

    public WinControl()
    {
        InitializeComponent();
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
    
            cp.ExStyle |= 0x00000020;
            return cp;
        }
    }
    
  • 现在将WPF usercontrol放在Win用户控件上并停靠wpfusercontrol 到其父级(赢得用户控制)。

  • 现在在Win Form和Dock win用户控件上拖动win用户控件 到其父母(表格)

你完成了。

答案 2 :(得分:0)

您可以使用Microsoft.Ink.dll创建自己的基于WinForms的UserControl,支持手写识别,如果这是您要做的事情。