1

私は持っている

  • Viewmodels を持つ 3 つの WPF UserControls
  • WPF ユーザーコントロールの 1 つを表示するための 1 つの WPF コンテナー
  • WinForm ユーザーコントロール

私が欲しい:私が設定した別のWPF UserControlを表示します。これはWinFormsユーザーコントロールにあります

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);
        }
    }
<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>

その結果、私はこれを持っています: ここに画像の説明を入力

コードの何が問題になっていますか?

4

1 に答える 1

1

x:Key="XYZ"DataTemplate から削除します。
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}"  />
于 2016-06-23T06:25:13.923 に答える