27

我正在尝试构建一个包含 TabControl 和 TextBlock 的 WPF 用户界面。

我想将这两个控件绑定到以下类的实例的基础集合:

class PageModel
{
  public string Title {get;set;}
  public string TabCaption {get;set;}
  public FrameworkElement TabContent {get;set}
}

选项卡控件应为每个 PageModel 显示一个选项卡。

  • 每个选项卡的标题应显示 TabCaption 属性
  • 每个选项卡的内容都应该是 TabContent 属性。

TextBlock 应显示当前选定选项卡的标题。

我怎样才能达到这个结果?

4

2 回答 2

64
<TabControl x:Name="_tabControl" ItemsSource="{Binding PageModels}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding TabCaption}"/>
            <Setter Property="Content" Value="{Binding TabContent}"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
<TextBlock Text="{Binding SelectedItem.Title, ElementName=_tabControl}"/>
于 2009-03-26T14:45:25.243 回答
7

我还在这里使用 ItemTemplate 和 ContentTemplate找到了另一个解决方案。

同样对于像我这样的任何 WPF 新手,在经历了一些头痛和沮丧之后,我意识到页面模型的集合需要是一个ObservableCollection<PageModel>而不是 aList<PageModel>或者对列表的任何更改都不会反映在选项卡上(即你不能添加或删除一个选项卡,如果它是一个列表)。

于 2012-08-31T16:35:43.003 回答