2017-09-07 7 views
0

Ich wickle Windows Form Legacy-Steuerelement in WPF-Steuerelement, mache ich dies für ein paar Windows Form-Steuerelemente. dh:Wie WinFormHost Objekt dynamisch festlegen?

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

In meinem ResourceDictionary ich, die einen Schlüssel für jede WPF-Steuerelemente

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

Es gibt eine Schicht von Doppelarbeit, die ich eliminate-- möchte ich jedes WPF-Steuerelement definieren müssen für jeder WindowsFormsHost Wrapper, der redundant ist. Gibt es auf jeden Fall, dass ich mit dem UserControl Objekt beseitigen kann, und verbinden Sie die DataTemplate gerade mit der WindowsFormsHost Steuerung? ie:

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

Aber das oben genannte scheint nicht zu funktionieren. Wie auch immer, um die obige Arbeit zu machen? Ist es überhaupt möglich?

Edit:

+0

@dymanoid, oh ja. Ich habe die Frage aktualisiert – Graviton

Antwort

1

Diese sollten funktionieren, dass AWrapper ist ein WindowsFormsHost:

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

Verwendungsbeispiel:

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

No UserControl beteiligt ist.

local Karten auf den Namespace, in dem die AWrapper Klasse definiert ist:

xmlns:local="clr-namespace:WpfApplication1" 
Verwandte Themen