首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF:两个TabControls / Switching在Win7/.NET 4.5下工作,但不能在Windows8.1/.NET 4.5.1下工作

WPF:两个TabControls / Switching在Win7/.NET 4.5下工作,但不能在Windows8.1/.NET 4.5.1下工作
EN

Stack Overflow用户
提问于 2014-10-16 16:42:41
回答 1查看 295关注 0票数 1

我有一个有两个TabControls的窗户。一个是左对齐,另一个是右对齐。TabControls的标头在顶行对齐。

每当我单击一个TabItem时,另一个TabControl就没有被聚焦。

这在我的开发PC (Windows7,.NET Framework4.5)上运行得非常好。

但是,当我在装有Windows8.1 (.NET 4.5.1)的PC上执行它时,我无法切换到右对齐的TabControl。当我单击其中的TabItem时,什么也没有发生。

MainWindow的XAML:

代码语言:javascript
复制
    <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>

事件处理程序:

代码语言:javascript
复制
    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上仍然不能)

EN

回答 1

Stack Overflow用户

发布于 2014-10-16 17:26:06

您将两个TabControls直接放在彼此的上方,但仍然希望能够将焦点放在下面的一个上。这显然可以在Win7中运行,但Windows8似乎使用了一个不同的控件模板,该模板可能会消耗TabPanel中“空白”部分的鼠标点击。

也许它添加了一个透明的画笔,所以你可以尝试一个简单的:

代码语言:javascript
复制
<TabControl.Resources>
    <Style TargetType="{x:Type TabPanel}">
        <Setter Property="Background" Value="{x:Null}" />
    </Style>
</TabControl.Resources>

然而,我怀疑抛弃选项卡控件并自己创建一些带样式的按钮会更容易?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26399887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档