为什么我的样式化 ToggleButton 在 TabControl 的第二个选项卡上不起作用?
Why doesn't my styled ToggleButton work on the second tab of a TabControl?
我在开发带有 TabControl 的 WPF 应用程序时遇到了问题 object。我尝试调试并找到问题,最后我找到了它,但我没有找到任何解决方法。这里有一些解释:
我使用了这个数据网格过滤库(here is a codeproject url),这是最好的(从我的角度来看)。我想使用 google material 设计主题对其进行自定义并更改一些图形功能,例如使用数据网格第一个选项卡 header 中的切换按钮到 hide/show过滤选项。
我创建了一个用户控件并将我的自定义数据网格放入其中。然后我将该控件嵌入到 tabItem 中。当我将此控件设置为第一个 tabItem 时,一切正常。但是当我将用户控件更改为另一个 tabItem 时,切换按钮不起作用。
这是我的主要 window 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 Inspector" 测试我的应用程序以找到可视化和逻辑树的结构。这种行为太奇怪了,因为当我将 "WPF Inspector" 附加到我的应用程序时,一切都开始工作了。下面的 GIF 是我做的:
当对数据对象使用 ContentControl
时,在您的情况下它是数据上下文,您将 Content
属性 绑定到数据对象并指定 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>
我在开发带有 TabControl 的 WPF 应用程序时遇到了问题 object。我尝试调试并找到问题,最后我找到了它,但我没有找到任何解决方法。这里有一些解释:
我使用了这个数据网格过滤库(here is a codeproject url),这是最好的(从我的角度来看)。我想使用 google material 设计主题对其进行自定义并更改一些图形功能,例如使用数据网格第一个选项卡 header 中的切换按钮到 hide/show过滤选项。
我创建了一个用户控件并将我的自定义数据网格放入其中。然后我将该控件嵌入到 tabItem 中。当我将此控件设置为第一个 tabItem 时,一切正常。但是当我将用户控件更改为另一个 tabItem 时,切换按钮不起作用。
这是我的主要 window 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 Inspector" 测试我的应用程序以找到可视化和逻辑树的结构。这种行为太奇怪了,因为当我将 "WPF Inspector" 附加到我的应用程序时,一切都开始工作了。下面的 GIF 是我做的:
当对数据对象使用 ContentControl
时,在您的情况下它是数据上下文,您将 Content
属性 绑定到数据对象并指定 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>