0

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

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

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

父选项卡控件:

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

内容模板:

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

物品来源:

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

谢谢你。

4

1 回答 1

1

首先,如果你只有一个项目,你为什么想要一个TabControl?如果您只想拥有一个带有标题的元素,您可以在ContentTemplate.

但是,为了解决您看到的问题,您是否尝试过SelectedIndex="0"设置ChildTabControl? 这应该迫使它始终被选中。

编辑其他可能的解决方案

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

我认为您可以解决此问题的最简单方法是SelectedItem将孩子TabControl的设置为ChildItemsSource

<TabControl Name="ChildTabControl"
            ItemsSource="{Binding ChildItemsSource, Converter={StaticResource ResourceKey=ItemToObservableCollectionConverter }}"
            SelectedItem="{Binding ChildItemsSource}" />

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

于 2013-08-13T15:05:52.110 回答