我正在学习WPF,我有一个关于绑定ComboBox的问题。
我有一个简单的WPF窗口,其中包含以下控件:顶部的ComboBox和下方的TabControl。
我用两个标准TabItems填充了选项卡控件。然后我又给它添加了几个标签--不过这些标签是我自己的"MyTab“类,它只是简单地继承了TabItem。我没有重写任何东西,也没有做任何稀奇古怪的事情,我只是添加了一些公共属性。
我想使用ComboBox作为导航工具。每个选项卡都有一个页眉,相同的页眉应该成为ComboBox中的一个项目。如果从ComboBox中选择,它应该使相应的选项卡成为活动选项卡。
下面是我在ComboBox上的设置:
<Window.Resources>
<DataTemplate x:Key="EmployeeListTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Header}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
。。然后再往下看Xaml ...
<ComboBox Grid.Row="1" Width="500" Name="qlist"
ItemsSource="{Binding ElementName=tabControl1, Path=Items}"
ItemTemplate="{StaticResource EmployeeListTemplate}" />
因此,我只是绑定到TabControl的Item集合,并选择Header作为SelectedItem的属性来显示。
它可以工作,当我单击ComboBox时,标题确实显示为单独的文本项。但当我进行实际选择时,该选项卡本身会呈现在该组合框的选择区域中!
我该如何解决这个问题?为什么它使用列表的Header属性,但当我从列表中选择时,它显示的值成为实际的TabItem对象?我觉得我遗漏了一些明显的东西
顺便说一句,我知道我说过我想用它来控制导航,但我把所有这些都去掉了,在我弄清楚这个令人抓狂的事情之后,我会担心它的。
仔细看--当我从组合框中选择tabItem1时,它实际上在控件中重新呈现了该选项卡项。您可以看到它的顶部,周围是列表项使用的标准蓝色选择背景。令人抓狂。
我在这里做错了什么?谢谢你的帮助
发布于 2013-05-16 04:24:37
这就是WPF的工作方式。如果所选项目可以在没有DataTemplates的情况下呈现,那么就会这样做。由于Items集合是可视元素的集合,因此DataTemplate不会用于呈现“选定的”元素。
这里请注意: Selected item使用ContentPresenter,而下拉列表使用另一个名为ItemsPresenter的东西,它总是使用DataTemplate呈现,即使底层绑定对象可以在没有DataTemplate的情况下呈现。
您需要将您的组合框和选项卡控件ItemsSource绑定到您自己的自定义列表中。这样你最终会得到你想要的。或者,您也可以直接覆盖ComboBox complete visual tree(http://msdn.microsoft.com/en-us/library/dd334408%28v=vs.95%29.aspx) -请参阅ContentPresenter部件。将其替换为您的数据模板。
https://stackoverflow.com/questions/16572055
复制相似问题