我有一个有两个TabControls的窗户。一个是左对齐,另一个是右对齐。TabControls的标头在顶行对齐。
每当我单击一个TabItem时,另一个TabControl就没有被聚焦。
这在我的开发PC (Windows7,.NET Framework4.5)上运行得非常好。
但是,当我在装有Windows8.1 (.NET 4.5.1)的PC上执行它时,我无法切换到右对齐的TabControl。当我单击其中的TabItem时,什么也没有发生。
MainWindow的XAML:
<Window x:Class="TabGroupProblem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<TabControl GotFocus="TabControl_GotFocus" x:Name="c1">
<TabItem Header="One">h</TabItem>
<TabItem Header="Two">i</TabItem>
</TabControl>
<TabControl GotFocus="TabControl_GotFocus_1" x:Name="c2">
<TabControl.Resources>
<Style TargetType="{x:Type TabPanel}">
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</TabControl.Resources>
<TabItem Header="Three">j</TabItem>
<TabItem Header="four">k</TabItem>
</TabControl>
</Grid>
</Window>事件处理程序:
private void TabControl_GotFocus(object sender, RoutedEventArgs e)
{
// c1 to foreground
System.Windows.Controls.Grid.SetZIndex(c2, -1);
c2.SelectedIndex = -1;
}
private void TabControl_GotFocus_1(object sender, RoutedEventArgs e)
{
// c2 to foreground
System.Windows.Controls.Grid.SetZIndex(c2, 1);
c1.SelectedIndex = -1;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Controls.Grid.SetZIndex(c1, 0);
System.Windows.Controls.Grid.SetZIndex(c2, -1);
c2.SelectedIndex = -1;
}为什么会发生这种情况,我可以针对它做些什么呢?

编辑:在我的开发PC上将目标框架切换到.NET 4.5.1。在我的PC上仍然可以在TabControls之间切换(在Windows8.1 PC上仍然不能)
发布于 2014-10-16 17:26:06
您将两个TabControls直接放在彼此的上方,但仍然希望能够将焦点放在下面的一个上。这显然可以在Win7中运行,但Windows8似乎使用了一个不同的控件模板,该模板可能会消耗TabPanel中“空白”部分的鼠标点击。
也许它添加了一个透明的画笔,所以你可以尝试一个简单的:
<TabControl.Resources>
<Style TargetType="{x:Type TabPanel}">
<Setter Property="Background" Value="{x:Null}" />
</Style>
</TabControl.Resources>然而,我怀疑抛弃选项卡控件并自己创建一些带样式的按钮会更容易?
https://stackoverflow.com/questions/26399887
复制相似问题