如何设置三个usercontrol以显示在TabItem中?

本文关键字:显示 TabItem usercontrol 何设置 设置 三个 | 更新日期: 2023-09-27 18:06:30

我在谷歌上搜索了一下这个主题,我想要么我一定是在做一些不需要答案的基本事情,要么我正试图以一种复杂的方式解决我的问题,需要重新考虑整个问题。

我有一个工厂对象,它创建了一个窗口-这是由一个单独的ViewModel对象中的命令调用。工厂对象负责将数据上下文分配给传递给它的数据列表。列表可以是可变计数的,列表中的每个项目应该显示在窗口的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头。这适用于标题,但我需要有三个独立的UserControls显示在每个tabitem上。
我已经将UserControls的命名空间添加到Window

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

我曾尝试将它们设置为资源,但没有成功。你可能已经猜到了,我对WPF还是个新手。

如何设置三个usercontrol以显示在TabItem中?

你可以这样做:

如果下面是您的命名空间

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设置为包含其他UserControls的主UserControl。我必须在TabControl的资源中的DataTemplate中引用主UserControl。