0

TreeViewそれぞれTreeViewItemに右クリック コンテキスト メニューが として適用されるように設定していますStyle。何かのようなもの:

<Grid.Resources>
    <ContextMenu x:Key="contextMenu">
         <MenuItem Header="Save"  IsEnabled="{Binding Path=Saveable}"/>
         <MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
         <MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
    </ContextMenu>
    <Style TargetType="TreeViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
    </Style>
</Grid.Resources>

Saveable、Copyable、および Removeable は、として使用されるオブジェクトから取得されるプロパティですTreeViewItem

私が探しているのは、ユーザーが をクリックするMenuItemと、選択したオブジェクトの適切なメソッドをクリックすることです。したがって、「保存」をクリックするMenuItemobject.Save()、「コピー」呼び出しobject.Copy()などが呼び出されます。しかし、構文がどのように見えるか、または典型的な WPF スタイルに関してそのアイデアが実際に受け入れられるかどうかはわかりません。囲んでいるウィンドウで新しいイベント ハンドラーを作成するだけでよいことはわかっていますが、選択した項目自体でイベントを処理したいと思います。

考え?

ありがとう!

4

1 に答える 1

2

残念ながら、これを自動化する方法はないと思います。最も近いオプションは、RoutedUICommandfor each アイテムをにセットアップしてから、クラスに for each をContextMenu作成することです。CommandBindingそれらを に移動させたい場合はTreeViewItem、おそらくサブクラス化してそこにTreeViewItemセットアップする必要CommandBindingsがあります。

私がうまくいくかもしれないと思った 1 つのオプションは、スタイルEventSetterに forを追加することです。ただし、これは機能しませんでした。おそらく、 のアイテムが とは異なるビジュアル ツリーにあるためです。MenuItem.ClickTreeViewItemContextMenuTreeViewItems

于 2009-05-13T16:17:00.690 に答える