27

TabControl と TextBlock を含む WPF ユーザー インターフェイスを構築しようとしています。

これら 2 つのコントロールを、次のクラスのインスタンスの基になるコレクションにバインドします。

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を使用して、これに対する別の解決策を見つけました

ObservableCollection<PageModel>また、私のようなWPF初心者の場合、頭痛や欲求不満の後で、ページモデルのコレクションを代わりに使用する必要があることに気付きました。そうしList<PageModel>ないと、リストへの変更がタブに反映されません(つまり、追加または削除できません)。リストの場合はタブ)。

于 2012-08-31T16:35:43.003 に答える