2011-09-26 13 views
6

は、私はこのようなコードを持っている:WPF ListboxItemとのContextMenu

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Vertical" 
        ContextMenuService.ShowOnDisabled="True"> 
      <StackPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Command="Delete" Click="DeleteEvent">  
        </MenuItem> 
       </ContextMenu> 
      </StackPanel.ContextMenu> 
       <TextBlock Text="{Binding EventName}"> 
      </TextBlock>   
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

残念ながら、それは動作しません。コンテキストメニューが無効になっています(表示されていますが、無効になっているためクリックできません)。私はこの問題が選択問題に関連していることを読んだが、私はその問題に対する解決策を見つけられなかった。あなたはなにか考えはありますか?

+0

なぜClickイベントとMenuItemのコマンドを同時に設定しようとしますか?また、このContextMenuを各アイテムまたはリストに表示しますか?ここではリスト全体に設定されています。 – Ucodia

+0

あなたのソリューションについてもっと具体的に説明したり、詳細を教えてもらえますか? – radzio

+0

@Ucodia:リスト全体の理由は?それはListBox.ItemTemplateの内部に設定されているようですね? – sll

答えて

5

まず、CommandとClickイベントを設定しようとしているというのは奇妙なことです。どちらか一方を設定する必要があります。たぶん、アクションが無効になっているのは、CanExecute = falseの値でCommandを設定しているためです。

代わりのDataTemplateを書いて、あなたはこのようなListBoxItemのためItemContainerStyleを設定しようとすることができます:

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         <MenuItem Header="Delete" Click="DeleteEvent"/> 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Content" Value="{Binding Path=EventName}"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
ここ

それは右のコントロールにメニューが表示されますので、私は直接ListBoxItemインスタンスののContextMenuを設定。

+2

残念なことに、私はあなたの解決策でこのエラーを受け取りました: {"'System.Windows.Controls型のオブジェクトをキャストすることができません。 MenuItem 'をタイプして' System.Windows.Controls.Button 'と入力してください。 "} – radzio

+0

これは、このような例外をスローしないようにするために、正確に何をしようとしているのでしょうか? – Ucodia

+0

リソースにコンテキストメニューを追加しました。動作しています:http://stackoverflow.com/questions/4752273/setting-event-handlers-inside-a-setter-value-structure – radzio

0

は、あなただけの、すでにMenuContextを持ってDeleteEvent

<ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" 
         ContextMenuService.ShowOnDisabled="True"> 
       <StackPanel.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="Delete" Click="DeleteEvent">  
         </MenuItem> 
        </ContextMenu> 
       </StackPanel.ContextMenu> 
        <TextBlock Text="{Binding EventName}"> 
       </TextBlock>   
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
0

リストボックスをヘッダーと処理するためのコマンドを変更する必要があります。それを試すことができます

<ListBox x:Name="MyistBox">      
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Name}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     <ListBox.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Update"/> 
       <MenuItem Header="Delete"/> 
      </ContextMenu> 
     </ListBox.ContextMenu> 
    </ListBox> 
関連する問題