从System.Windows.UIElement中的System.Windows.Forms包装控件

时间:2009-11-18 09:14:08

标签: c# wpf winforms

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

如果可能,实施会导致任何后果吗?

2 个答案:

答案 0 :(得分:4)

您可以在WPF表单中托管Windows窗体控件。只需将其包装在WindowsFormsHost元素中即可。这显示了如何在WPF窗口的一侧托管窗体窗体蒙版测试框。

<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>

答案 1 :(得分:0)

WindowsFormsHost课程,但我会添加注意事项。如果您使用winforms中的所有旧控件,与WPF混合使用,对用户来说这将是一次不错的体验。我假设你被告知你不能,或者没有时间,但实际上你应该用WPF控件替换你现有的控件。除非你有很多严重复杂的所有者绘制的东西,否则这不应该太费力。

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