2016-10-23 27 views
4

当我使用TabControl对象开发WPF应用程序时遇到问题。我试图调试并发现问题,最后我明白了,但是我没有找到任何解决方法。这里是一些解释:为什么我的样式的ToggleButton不能在TabControl的第二个选项卡上工作?

我用这个数据网格过滤库(here is a codeproject url),这是最好的(从我的角度来看)。我想用谷歌材质设计主题对其进行定制,并更改一些图形功能,例如在数据网格的第一个标签页眉中使用切换按钮来隐藏/显示过滤选项。

我创建了一个用户控件,并在其中放置了我的自定义数据网格。然后我将该控件嵌入到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

Control was placed in the first tab Control was placed in the other tab

编辑:今天,我测试了“WPF督察”应用程序查找视觉和逻辑树的结构。这种行为太奇怪了,因为当我将“WPF Inspector”附加到我的应用程序中时,所有事情都开始奏效。下面GIF是我做过什么:

Strange behavior GIF

+0

欢迎SO!我改变了你的问题的标题。请参阅[帮助页面](http://stackoverflow.com/help/tagging)以获知是否应在问题标题中使用标签。您还应该向我们提供[mcve],而不仅仅是发布指向外部代码的链接。 – dymanoid

+0

这两个代码没有区别。您应该只更改TabControl中TabItem的顺序。不过,我会添加一些代码行。我很感激你的报价。 – Alireza

回答

1

当使用一个数据对象一个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> 
+0

我感谢你的帮助。我的问题解决了。 – Alireza

相关问题