我遇到了WPF中嵌套TabControl的一个奇怪问题。
在我的主窗口中,我需要将一个TabControl放在另一个TabItem中,以便创建不同的菜单级别。由于我不需要默认选择TabItem,因此我使用TabControl.Loaded
事件,如下所示:
private void TabControl_Loaded(object sender, RoutedEventArgs e)
{
((TabControl)sender).SelectedItem = null;
}
问题是:嵌套TabControl的第一个TabItem不可选,除非选择第二个TabItem,然后再次单击第一个标题。
我创建了一个示例项目来演示这个问题。
XAML:
<Window x:Class="TabControlTest.MainWindow"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TabControlTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TabControl Loaded="TabControl_Loaded">
<TabItem>
<TabItem.Header>
<Label Content="Menu 1" />
</TabItem.Header>
<Grid>
<TabControl Loaded="TabControl_Loaded">
<TabItem>
<TabItem.Header>
<Label Content="Sub-Menu 1" />
</TabItem.Header>
<Grid>
<Button Content="Button in subitem 1" Margin="82,131,553,89" />
</Grid>
</TabItem>
<TabItem>
<TabItem.Header>
<Label Content="Sub-Menu 2" />
</TabItem.Header>
<Grid>
<Button Content="Button in subitem 2" Margin="429,69,206,151" />
</Grid>
</TabItem>
</TabControl>
</Grid>
</TabItem>
<TabItem>
<TabItem.Header>
<Label Content="Menu 2" />
</TabItem.Header>
<Grid>
<Button Content="Button in Hello 2" Height="NaN" Margin="274,65,54,237" Width="NaN" />
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>
如果我禁用Loaded
事件,则不会出现任何问题。
任何帮助都将不胜感激。
编辑:我在这里上传了示例项目。
2条答案
按热度按时间6rqinv9w1#
除了处理
Loaded
事件之外,我相信您可以添加一个不可见的TabItem
来防止第一个“真实的”选项卡在最初被选中:另一种可能的解决方法是使用
ItemsSource
属性将TabControl
绑定到源集合。omtl5h9j2#
你可以处理window.contentrendered并在外部选项卡控件上将selectedindex设置为-1:
很明显,我将tabcontrol命名为tc:
当我在外部选项卡控件上加载句柄时,同样的方法起作用。