2012-03-03 3 views
0

私はWPFでListViewをGridViewに設定しており、コンテキストメニューを持っています。 ListViewで何かが選択されているときにコンテキストメニューを有効にするにはどうすればよいですか?何も選択されていないとき、ListViewのコンテキストメニューを無効にする方法?

これをすべてXAMLでMVVMパターンに従っていきたいので、助けてもらえれば助かります。

答えて

1

トリガーを使用する必要があります。最初にContextMenuをリソースとして定義します。 がここに短いサンプルです:これはあなたが何をしたいときに

<Window x:Class="SO.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <ContextMenu x:Key="ctxmnu"> 
      <MenuItem Header="Open" /> 
      <MenuItem Header="Close" /> 
     </ContextMenu> 
    </Window.Resources> 

    <StackPanel> 
     <ListView x:Name="lv"> 
      <ListView.Items> 
       <clr:String>Item 1</clr:String> 
       <clr:String>Item 2</clr:String> 
      </ListView.Items> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding}" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
      <ListView.Style> 
       <Style TargetType="ListView"> 
        <Setter Property="ContextMenu" Value="{StaticResource ctxmnu1}" /> 
        <Style.Triggers> 
         <Trigger Property="SelectedIndex" Value="-1"> 
          <Setter Property="ContextMenu" Value="{x:Null}" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </ListView.Style> 
     </ListView> 
    </StackPanel> 
</Window> 

すべてのことを言って、私は本当のシナリオを想像することはできません。まず、ListViewを右クリックするとコンテキストメニューがポップアップし、項目が選択されます。第二に、これは悪いUIデザインだと思います。同じメニューを表示することをお勧めしますが、アイテムを無効にしてください(ケース内のすべてのアイテム)。このようにして、ポップアップメニューが存在することをユーザに通知しますが、その機能は現在有効になっていません。

+0

ありがとうございました。私はアイテムを無効にするように調整します^^ – user25101622

関連する問題