TabControl的问题,ContentTemplate包含一个TabControl

时间:2013-08-13 12:59:28

标签: wpf templates tabcontrol selecteditem

在我的WPF应用程序中,我有一个名为 ParentTabControl TabControl,其中ContentTemplate由多个控件组成,包括TabControl名为 ChildTabControl

ParentTabControl包含,比方说,2个选项卡(每个选项卡绑定到不同的源),其中 ChildTabControl 始终包含1个选项卡。我正在关注 ParentTabControl 的第一个标签。默认情况下,选择 ChildTabControl 的第一个(唯一一个)选项卡。问题是,如果我切换到 ParentTabControl 的第二个选项卡,则不会选择其 ChildTabControl 的选项卡。这是正常的行为吗?如何始终选择标签?

我希望我足够清楚。这是一些代码:

ParentTabControl:

<TabControl Name="ParentTabControl"
            ItemsSource="{Binding ParentItemsSource}"
            ContentTemplate="{StaticResource ResourceKey=ContentTemplate}"
            IsSynchronizedWithCurrentItem="True" />

的ContentTemplate:

<DataTemplate x:Key="ContentTemplate">
    <TabControl Name="ChildTabControl"
                ItemsSource="{Binding ChildItemsSource, Converter={StaticResource ResourceKey=ItemToObservableCollectionConverter }}" />
</DataTemplate>

的ItemsSource:

public ObservableCollection<ParentData> ParentItemsSource { get; set; }

public class ParentData
{
    public ChildData ChildItemsSource { get; set; }
}

转换器:

public class ItemToObservableCollectionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return new ObservableCollection<object> { value };
    }
}

谢谢。

1 个答案:

答案 0 :(得分:1)

首先,如果您只有一个项目,为什么要TabControl?如果您只想要一个带标题的元素,可以在ContentTemplate中执行此操作。

为了解决您所看到的问题,您是否尝试在SelectedIndex="0"上设置ChildTabControl?这应该强制它总是被选中。

编辑其他可能的解决方案

嗯,我能够复制这个,但它只是在我的测试中间歇性地发生。

我认为解决此问题的最简单方法是将孩子SelectedItem的{​​{1}}设置为TabControl

ChildItemsSource

我不知道是什么导致了这个问题,但这肯定会解决它。