我在开发带有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
编辑:今天,我使用“WPF检查器”测试我的应用程序,以找到可视化和逻辑树的结构。行为太奇怪了,因为当我将“WPF Inspector”附加到我的应用程序时,所有东西开始工作。下面的GIF是我所做的:
最佳答案
当为数据对象使用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/