【发布时间】:2014-10-16 17:26:06
【问题描述】:
我有一个带有两个 TabControl 的窗口。一个是左对齐,另一个是右对齐。 TabControls 的 Headers 在顶行对齐。
每当我单击一个 TabItem 时,另一个 TabControl 都没有焦点。
这在我的开发 PC(Windows 7、.NET Framework 4.5)上运行良好。
但是,当我在装有 Windows 8.1 (.NET 4.5.1) 的 PC 下执行它时,我无法切换到右对齐的 TabControl。当我点击其中的 TabItem 时,什么都没有发生。
主窗口的 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 上将 Target 框架切换到 .NET 4.5.1。在我的 PC 上切换 TabControls 仍然有效(在 Windows 8.1 PC 上仍然无效)
【问题讨论】: