2

アプリケーションのメイン ワークスペースとして TabControl を使用しています。開いているタブのヘッダーを一覧表示する [ウィンドウ] メニュー項目を追加したいと考えています。アクティブな (つまり、フォーカスされた) タブをチェックする必要があります。

次のように ItemsTemplate を使用してみました。

            <MenuItem Header="_Window" ItemsSource="{Binding ElementName=ux_workspace, Path=Items}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Path=Header}" IsCheckable="True" IsChecked="{Binding IsFocused, Mode=OneWay}">
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>

各 MenuItem は、いわば別の MenuItem の内部に「ネスト」されますが、これは実際には意図した結果ではありません (チェックボックスはヘッダー領域にあり、内部項目の周りに別の境界線があります)。

これを行うより良い方法はありますか?

前もって感謝します。

4

2 に答える 2

2

テンプレートを使用してこれを行う方法があるはずですが、スタイルの作成と使用は機能しているようです。

<Style x:Key="TabMenuItem" TargetType="MenuItem">
    <Setter Property="Header" Value="{Binding Path=Header}" />
    <Setter Property="IsCheckable" Value="True" />
    <Setter Property="IsChecked" Value="{Binding Path=IsFocused, Mode=OneWay}" />
</Style>

<MenuItem Header="_Window"
    ItemsSource="{Binding ElementName=ux_workspace, Path=Items}"
    ItemContainerStyle="{StaticResource TabMenuItem}" />
于 2009-06-15T16:45:34.653 に答える
2

Malcolm さん、MenuItem にバインドするときは、IsFocused の代わりに IsSelected を使用することをお勧めします。

IsFocused の代わりに IsSelected を使用する場合は、適切な TabItem を選択するために Click ハンドラーを使用する必要がないように、IsSelected を Mode=TwoWay にバインドすることもできます。

于 2009-06-15T19:10:18.310 に答える