2017-09-07 6 views
0

WPFコントロール内にWindowsフォームレガシコントロールをラップしていますが、これはいくつかのWindowsフォームコントロールで行います。すなわち:私は、各WPFのためのキーを定義しています私のResourceDictionaryWinFormHostオブジェクトを動的に設定するには?

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

は私が各WPFコントロールを定義する必要がありますeliminate--たい重複の一つの層があり

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

を制御しますそれぞれWindowsFormsHostラッパーです。これは冗長です。とにかく私がUserControlオブジェクトで取り除くことができ、DataTemplateを直接WindowsFormsHostのコントロールで接続できますか?すなわち:私はこのような何かを見ている:

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

しかし、上記は動作していないようです。とにかく上記の仕事をするには?まったく可能ですか?

編集:

<DataTemplate x:Key="AControlKey"> 
    <local:AWrapper/> 
</DataTemplate> 

使用例:

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

ませんUserControlが関与している

+0

@dymanoid、ああ:

localAWrapperクラスが定義されている名前空間にマッピングされます。私は質問を更新しました – Graviton

答えて

1

これはAWrapperWindowsFormsHostであることをあれば動作します。

xmlns:local="clr-namespace:WpfApplication1"