C# 在System.Windows.UIElement中包装System.Windows.Forms中的控件

C# 在System.Windows.UIElement中包装System.Windows.Forms中的控件,c#,wpf,winforms,C#,Wpf,Winforms,是否可以在System.Windows.UIElement中包装旧的System.Windows.Forms控件?我知道文件是以某种方式包装的,其基础来自System.Windows.Forms 如果这是可能的,那么实现会导致任何后果吗?有一个类,不过我要补充一点注意事项。如果您使用的是winforms中的所有旧控件,并混合了WPF,那么对用户来说,这将不是一个好的体验。我假设有人告诉您不能,或者没有时间,但实际上您应该用WPF控件替换现有控件。除非你有很多非常复杂的业主绘制的东西,否则这不应该

是否可以在System.Windows.UIElement中包装旧的System.Windows.Forms控件?我知道文件是以某种方式包装的,其基础来自System.Windows.Forms

如果这是可能的,那么实现会导致任何后果吗?

有一个类,不过我要补充一点注意事项。如果您使用的是winforms中的所有旧控件,并混合了WPF,那么对用户来说,这将不是一个好的体验。我假设有人告诉您不能,或者没有时间,但实际上您应该用WPF控件替换现有控件。除非你有很多非常复杂的业主绘制的东西,否则这不应该是太多的努力

因此,我的建议是开始创建现有控件的WPF版本(或者从Telerik这样的人那里购买一套用于您创建的任何非特定于域的控件,如工具栏等),并且只保留Winforms控件用于您创建的额外复杂的定制控件。即便如此,你也应该计划一个“第二阶段”来取代这些。您的用户将为此感谢您。

有这个类,不过我要补充一点注意事项。如果您使用的是winforms中的所有旧控件,并混合了WPF,那么对用户来说,这将不是一个好的体验。我假设有人告诉您不能,或者没有时间,但实际上您应该用WPF控件替换现有控件。除非你有很多非常复杂的业主绘制的东西,否则这不应该是太多的努力


因此,我的建议是开始创建现有控件的WPF版本(或者从Telerik这样的人那里购买一套用于您创建的任何非特定于域的控件,如工具栏等),并且只保留Winforms控件用于您创建的额外复杂的定制控件。即便如此,你也应该计划一个“第二阶段”来取代这些。您的用户将为此感谢您。

您可以在WPF表单中托管Windows表单控件。只需将其包装在WindowsFormsHost元素中。这显示了如何在WPF窗口中托管windows窗体屏蔽测试框

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
    Title="HostingWfInWpf"
    >

  <Grid>

    <WindowsFormsHost>
      <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/>
    </WindowsFormsHost>

  </Grid>


</Window>

您可以在WPF窗体中托管Windows窗体控件。只需将其包装在WindowsFormsHost元素中。这显示了如何在WPF窗口中托管windows窗体屏蔽测试框

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
    Title="HostingWfInWpf"
    >

  <Grid>

    <WindowsFormsHost>
      <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/>
    </WindowsFormsHost>

  </Grid>


</Window>


在WPF窗口中包含WinForms控件时,您发现了哪些问题?我断断续续地听说人们会遇到问题,但在我编写的混合WPF/WinForms中,将两者结合起来并没有任何实际困难。当然,我所做的所有整合都是在理解空间和焦点的基础上进行的。也许我只是在没有意识到的情况下避免了一些明显的陷阱,或者也许我只是运气好。嗯,实际上我指的是外观和感觉。除非付出一定的代价,否则winforms控件的外观和感觉将与wpf内容不一致。您发现在wpf窗口中包含winforms控件有什么问题?我断断续续地听说人们会遇到问题,但在我编写的混合WPF/WinForms中,将两者结合起来并没有任何实际困难。当然,我所做的所有整合都是在理解空间和焦点的基础上进行的。也许我只是在没有意识到的情况下避免了一些明显的陷阱,或者也许我只是运气好。嗯,实际上我指的是外观和感觉。除非付出一定的代价,否则winforms控件的外观和感觉将与wpf内容不一致。