我在开发带有TabControl对象的WPF应用程序时遇到问题。我尝试调试并找到问题,最后找到了问题,但没有找到解决方法。这里是一些解释:

我使用了这个数据网格过滤库(here is a codeproject url),这是最好的(从我的角度来看)。我想用google material设计主题自定义它,并更改一些图形功能,例如使用data gird的第一个标签页眉中的切换按钮来隐藏/显示过滤选项。

我创建了一个用户控件,并将自定义数据网格放在其中。然后,我将该控件嵌入到tabItem中。当我将此控件设置为第一个tabItem时,一切正常。但是,当我将用户控件更改为另一个tabItem时,切换按钮不起作用。

这是我的主窗口xaml代码不起作用:

 <TabControl x:Name="tabControl">
        <TabItem Header="1'st Tab">
            <ContentControl DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
                <Button Content="Do no thing"></Button>
            </ContentControl>
        </TabItem>
        <TabItem Header="2'nd Tab">
            <ContentControl DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
                <local:UserControl1/>
            </ContentControl>
        </TabItem>
 </TabControl>

请注意,如果我更改TabItems的顺序,则效果很好。有人建议如何解决这个问题吗? Here is my sample project code on Github

c# - 为什么我的样式切换按钮在TabControl的第二个选项卡上不起作用?-LMLPHP
c# - 为什么我的样式切换按钮在TabControl的第二个选项卡上不起作用?-LMLPHP

编辑:今天,我使用“WPF检查器”测试我的应用程序,以找到可视化和逻辑树的结构。行为太奇怪了,因为当我将“WPF Inspector”附加到我的应用程序时,所有东西开始工作。下面的GIF是我所做的:

c# - 为什么我的样式切换按钮在TabControl的第二个选项卡上不起作用?-LMLPHP

最佳答案

当为数据对象使用ContentControl时(在您的情况下是数据上下文),您可以将Content属性绑定(bind)到Data-Object并指定DataTemplate属性。在这种情况下,DataTemplate中的内容会将其DataContext设置为您的数据对象。

这是一个工作示例:

    <TabControl x:Name="tabControl">
        <TabItem Header="1'st Tab">
            <ContentControl Content="{Binding .}">
                <ContentControl.ContentTemplate>
                    <DataTemplate>
                        <Button Content="Do no thing"></Button>
                    </DataTemplate>
                </ContentControl.ContentTemplate>
            </ContentControl>
        </TabItem>
        <TabItem Header="2'nd Tab">
            <ContentControl Content="{Binding .}">
                <ContentControl.ContentTemplate>
                    <DataTemplate>
                        <local:UserControl1/>
                    </DataTemplate>
                </ContentControl.ContentTemplate>
            </ContentControl>
        </TabItem>
    </TabControl>

关于c# - 为什么我的样式切换按钮在TabControl的第二个选项卡上不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40201420/

10-15 18:22
查看更多