11

コンテキスト メニューがあります。問題は、リストビュー項目がクリックされたときにのみ開く必要があることです。現在、リストビューまたはヘッダーのどこかをクリックすると開きます。

<ListView> 
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="More Info" Command="{Binding MoreInfo}" />
        </ContextMenu>
     </ListView.ContextMenu>
     <ListView.View> 
         <GridView> 
           <!-- columns and stuff here -->
         </GridView>
     </ListView.View>
 </ListView>

ContextMenu をリソースとして追加し、スタイルとして適用しようとしましたが、これによりコマンドが壊れます (詳細情報をクリックするとダイアログ ウィンドウが開きますが、この方法では機能しません)。

<ListView.Resources>
    <ContextMenu x:Key="ItemContextMenu">
        <MenuItem Header="More Info" Command="{Binding MoreInfo}" Background="WhiteSmoke" />
    </ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}" >
        <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}" />
    </Style>
</ListView.ItemContainerStyle>

そのため、コンテキスト メニューを listviewitem のみに制限し、コマンドを機能させる方法がわかりません。

4

2 に答える 2

28

テンプレートのコマンド バインディングでRelativeSourceを使用すると、次のように動作します。

<ListView.Resources>
    <ContextMenu x:Key="ItemContextMenu">
        <MenuItem Header="More Info" Command="{Binding Path=DataContext.MoreInfo, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}" Background="WhiteSmoke" />
    </ContextMenu>
</ListView.Resources>

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}" >
        <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}" />
    </Style>
</ListView.ItemContainerStyle>
于 2013-09-20T16:22:55.820 に答える