如何动态设置 WinFormHost 对象?

How to set WinFormHost object dynamically?

我正在将 Windows 表单遗留控件包装在 WPF 控件中,我正在为一些 Windows 表单控件执行此操作。即:

 // WinFormHost control, only AWrapper is shown here, but there 
 //are BWrapper, CWrapper etc
 public class AWrapper : WindowsFormsHost 
 {
   Child=new ALegacyWinFormControl();
 }

//WPF control, similarly there are BControl, CControl etc
<UserControl x:Class="AControl">
    <local:AWrapper  />
</UserControl>

在我的 ResourceDictionary 我正在为每个 WPF 控件定义一个键

// each WPF control has a key
<ResourceDictionary>
    <DataTemplate x:Key="AControlKey">
        <AControl />
    </DataTemplate>
    <DataTemplate x:Key="BControlKey">
        <BControl />
    </DataTemplate>
</ResourceDictionary>

我想消除一层重复——我将不得不为每个 WindowsFormsHost 包装器定义每个 WPF 控件,这是多余的。无论如何我可以取消 UserControl 对象,并将 DataTemplate 直接连接到 WindowsFormsHost 控件吗?即:我正在看这样的东西:

// This wouldn't work
<ResourceDictionary>
    <DataTemplate x:Key="AControlKey">
        <AWrapper/>
    </DataTemplate>
    <DataTemplate x:Key="BControlKey">
        <BWrapper/>
    </DataTemplate>
</ResourceDictionary>

但是上面的方法好像不行。无论如何要使上述工作?有可能吗?

编辑:

如果 AWrapperWindowsFormsHost:

,这应该可以工作
<DataTemplate x:Key="AControlKey">
    <local:AWrapper/>
</DataTemplate>

示例用法:

<ContentControl Content="." ContentTemplate="{StaticResource AControlKey}" />

不涉及 UserControl

local 映射到定义 AWrapper class 的命名空间:

xmlns:local="clr-namespace:WpfApplication1"