【发布时间】:2013-05-15 18:06:21
【问题描述】:
我正在学习 WPF,我有一个关于绑定 ComboBox 的问题
我有一个简单的 WPF 窗口,其中包含以下控件:顶部的 ComboBox 和下方的 TabControl。
我用两个标准的 TabItems 填充 tabcontrol。然后我向它添加了更多选项卡 - 但是这些是我自己的“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 时,它实际上在控件内重新呈现了该选项卡项。您可以看到它的顶部,周围是列表项使用的标准蓝色选择背景。让人抓狂。
我在这里做错了什么?感谢您的帮助
【问题讨论】:
-
这是 WPF 中的一个实际错误。有解决办法,贴在这里:stackoverflow.com/questions/546119/…
-
这非常有帮助!谢谢!与此同时,我用一个列表框重新做了这个,它工作得很好。包括双向绑定,因此我可以从选项卡控件或列表中选择活动选项卡。那让我发疯了。谢谢你给我另一个参考
标签: c# wpf windows visual-studio-2010 c#-4.0