如何设置三个 UserControl 显示在一个 TabItem 中?

How can I set three UserControls to display in a TabItem?

我已经对该主题进行了一些 google 搜索,我想要么我必须做一些非常基础的事情,不需要答案,要么我正在尝试以复杂的方式解决我的问题并且需要重新考虑整个事情。

我有一个工厂 object 创建一个 Window - 这是由单独的 ViewModel object 中的命令调用的。工厂 object 负责将数据上下文分配给传递给它的数据列表。该列表的数量可以是可变的,列表中的每个项目都应显示在 Window 的 TabControl 的单独选项卡上。

<TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">
        <Setter Property="Header" Value="{Binding Path=VMNameAndDate, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=true}"></Setter>
    </Style>
</TabControl.ItemContainerStyle>

我目前正在使用 ItemContainerStyle 来设置 TabItem header。 这适用于 header 但我需要在每个 TabItems 上显示三个单独的用户控件。
我已将 UserControls 的命名空间添加到 Window

    xmlns:my="clr-namespace:ThisProgram.UserControls"

我尝试将它们设置为资源但没有成功。您可能已经知道我是 WPF 的新手。

你可以这样做:

如果以下是您的命名空间

xmlns:my="clr-namespace:ThisProgram.UserControls"

然后

<Grid>
        <TabControl>           
            <TabItem Header="UC1" >
                <my:ucSDH ></my:ucSDH>
            </TabItem>
            <TabItem Header="UC2">
                <my:ucWDH ></my:ucWDH>
            </TabItem>

        </TabControl>
    </Grid>

您可以根据需要将 DataContext 附加到 UserControls

如果要将 itemsSource 绑定到 TabControl,则:

public ObservableCollection<Object> coll { get; set; }

public MainWindow()
{
    InitializeComponent();
    coll = new ObservableCollection<Object>();

    Object uc1 = new UserControl1();
    Object uc2 = new UserControl2();
    coll.Add(uc1);
    coll.Add(uc2);

    tab1.ItemsSource = coll;
}

并且在 Xaml 中:

<TabControl x:Name="tab1" ItemsSource="{Binding coll}"></TabControl>

好的,经过大量挖掘并与 WPF 中的模板进行最终协调后,答案是:

            <TabControl Name="ViewModeListTabControl" Grid.Column="1"
                ItemsSource="{Binding  UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, Mode=OneWay}" 
                SelectedItem="{Binding Path=SelectedViewModel,
        Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=true}" ContentTemplate="{DynamicResource UCAnother}">
        <TabControl.Resources>
                <DataTemplate x:Key="UCAnother"  DataType="{x:Type my:AnotherUserControl}" >
                    <my:AnotherUserControl DataContext="{Binding}"></my:AnotherUserControl>
                </DataTemplate>
        </TabControl.Resources>

我需要将 TabControl 的 ContentTemplate 设置为包含其他 UserControl 的主 UserControl。我必须在 TabControl 资源的 DataTemplate 中引用主 UserControl。 现在一切正常。