2

サブメニューを含むメニューを持つアプリケーションを作成しています。また、ユーザーがキーボードでメニューをナビゲートするときに、フォーカスされた MenuItem に関する情報を表示する StatusBar があります。各 MenuItem から GotFocus イベントを処理し、StatusBar のコンテンツを送信者のタグに変更しようとしましたが、1.1 と 2.2 ではなく、MenuItem 1 でのみ機能します。

XAML:

<Menu Height="23" x:Name="mainMenu">
    <MenuItem Header="Header1" Tag="Info1" GotFocus="MenuItem_GotFocus_1">
        <MenuItem Header="Header1.1" Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/>
        <MenuItem Header="Header1.2"  Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/>
        ...
    </MenuItem>
    ...
</Menu>

C#:

private void MenuItem_GotFocus_1(object sender, RoutedEventArgs e)
{
    statusBarItem.Content = (sender as FrameworkElement).Tag;
}

サブメニューのフォーカスされた項目に関する情報を表示するにはどうすればよいですか? 多分それを行う他の方法がありますか?

ありがとう、アレクサンドル。

4

1 に答える 1

0

それがあなたが必要としているものに正確に当てはまるかどうかはわかりませんが、私はそれがあなたが必要としているものだと思います...

ビューモデルにバインドするのが常に最善です-そして、それにバインドするだけで、他の場所でその「ステータス」を公開できます...

(標準のWPFメニュー項目について話している場合)これは読み取り専用であるため、バインドにわずかな問題があり、 http://meleak.wordpress.com/2011/08IsFocusedのようにバインドが失敗します。
/ 28 / onewaytosource-binding-for-readonly-dependency-property /
(これは、ActiveWidth / Heightの場合と同様に、このソリューションの良い例でもあります)

<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
    <Setter Property="pb:PushBindingManager.StylePushBindings">
            <Setter.Value>
    <pb:PushBindingCollection>
    <pb:PushBinding TargetProperty="IsFocused" Path="IsFocused"/>
    </pb:PushBindingCollection>
            </Setter.Value>
    </Setter>

上記の記事のリンクからそれをサポートするプロジェクト/ライブラリをダウンロードできます(PushBindingManager)次のようなものを入力xmlns:pb="clr-namespace:PushBindingExtension;assembly=some-assembly"します(コピーして統合しているので、正確なソース/名前はここにありません)。

そして、あなたは行くように設定されている必要があります。ビューモデルを作成IsFocusedし、メニューをそれにバインドしてから、is focusedそのステータスにあるアイテムをすべて表示します。これを実行するためにここで必要な「レッグワーク」がいくつかありますが、かなり最小限です。

お役に立てれば

注:ダウンロードには他のリンク(http://dl.dropbox.com/u/39657172/Blog/PushBindingInStyleDemo.zipなど)を使用してください(スタイルには必要な
ものが含まれています。StylePushBindings

于 2013-03-12T17:09:13.213 に答える