首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WPF中,我如何绑定一个组合框到TabControl项目?

在WPF中,我如何绑定一个组合框到TabControl项目?
EN

Stack Overflow用户
提问于 2013-05-16 02:06:21
回答 1查看 1.6K关注 0票数 0

我正在学习WPF,我有一个关于绑定ComboBox的问题。

我有一个简单的WPF窗口,其中包含以下控件:顶部的ComboBox和下方的TabControl。

我用两个标准TabItems填充了选项卡控件。然后我又给它添加了几个标签--不过这些标签是我自己的"MyTab“类,它只是简单地继承了TabItem。我没有重写任何东西,也没有做任何稀奇古怪的事情,我只是添加了一些公共属性。

我想使用ComboBox作为导航工具。每个选项卡都有一个页眉,相同的页眉应该成为ComboBox中的一个项目。如果从ComboBox中选择,它应该使相应的选项卡成为活动选项卡。

下面是我在ComboBox上的设置:

代码语言:javascript
运行
复制
   <Window.Resources>
        <DataTemplate x:Key="EmployeeListTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Header}" />
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

。。然后再往下看Xaml ...

代码语言:javascript
运行
复制
<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时,它实际上在控件中重新呈现了该选项卡项。您可以看到它的顶部,周围是列表项使用的标准蓝色选择背景。令人抓狂。

我在这里做错了什么?谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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部件。将其替换为您的数据模板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16572055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档