如何动态设置 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>
但是上面的方法好像不行。无论如何要使上述工作?有可能吗?
编辑:
如果 AWrapper
是 WindowsFormsHost
:
,这应该可以工作
<DataTemplate x:Key="AControlKey">
<local:AWrapper/>
</DataTemplate>
示例用法:
<ContentControl Content="." ContentTemplate="{StaticResource AControlKey}" />
不涉及 UserControl
。
local
映射到定义 AWrapper
class 的命名空间:
xmlns:local="clr-namespace:WpfApplication1"
我正在将 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>
但是上面的方法好像不行。无论如何要使上述工作?有可能吗?
编辑:
如果 AWrapper
是 WindowsFormsHost
:
<DataTemplate x:Key="AControlKey">
<local:AWrapper/>
</DataTemplate>
示例用法:
<ContentControl Content="." ContentTemplate="{StaticResource AControlKey}" />
不涉及 UserControl
。
local
映射到定义 AWrapper
class 的命名空间:
xmlns:local="clr-namespace:WpfApplication1"