2016-06-23 11 views
1

でのContentPresenterを使用する方法:異なるWPF UserControlを表示します。これはWinFormsのユーザーコントロールで設定します。私は彼らのviewmodels</li> <li>私が欲しいWPFのUserControl</li> <li>のWinFormユーザーコントロール</li> </ul> <p>のいずれかを表示するための1つのWPFコンテナと</p> <ul> <li>3 WPFのユーザーコントロールを持っているElementHost

public partial class WinContainer : UserControl 
    { 
     public WinContainer() 
     { 
      InitializeComponent(); 
      WPFContainer WPFControl = new WPFContainer(); 
      PartPageViewModel ss = new PartPageViewModel(); 
      WPFControl.DataContext = ss; 
      ElementHost elHost = new ElementHost(); 
      elHost.Child = WPFControl; 
      elHost.Dock = DockStyle.Fill; 
      this.Controls.Add(elHost); 
     } 
    } 
enter image description here

私のコードの何が問題なのです。その結果で

<UserControl x:Class="MDMSpecification.Views.WPFContainer" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:MDMSpecification.Views" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:services="clr-namespace:MDMSpecification.Services" 
      xmlns:viewModels="clr-namespace:MDMSpecification.ViewModels" 
      d:DesignHeight="300" 
      d:DesignWidth="300" 
      mc:Ignorable="d"> 
    <UserControl.Resources> 
     <DataTemplate x:Key="Assembly" DataType="{x:Type viewModels:AssemblyPageViewModel}"> 
      <local:AssemblyPageView /> 
     </DataTemplate> 
     <DataTemplate x:Key="Part" DataType="{x:Type viewModels:PartPageViewModel}"> 
      <local:PartPageView /> 
     </DataTemplate> 
     <DataTemplate x:Key="Drawing" DataType="{x:Type viewModels:DrawingPageViewModel}"> 
      <local:DrawingPageView /> 
     </DataTemplate> 
    </UserControl.Resources> 
    <StackPanel> 
     <ContentPresenter Content="{Binding}" /> 
    </StackPanel> 
</UserControl> 

私は、これはありますか?

答えて

1

DataTemplateからx:Key="XYZ"を削除します。
DataTemplateをDataTypeに自動的に適用するには、キーを省略する必要があります。たとえば

<DataTemplate DataType="{x:Type viewModels:AssemblyPageViewModel}"> 
    <local:AssemblyPageView /> 
</DataTemplate> 

このXAMLは同等です:

<DataTemplate x:Key={x:Type viewModels:AssemblyPageViewModel} 
       DataType="{x:Type viewModels:AssemblyPageViewModel}"> 
    <local:AssemblyPageView /> 
</DataTemplate> 

キーとDataTemplatesは次のように明示的に適用する必要があります。

<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource Assembly}" /> 
+0

は完全な答えをいただき、ありがとうございます。 – streamdown

関連する問題

 関連する問題