2011-09-26 64 views
6

我有這樣的代碼:WPF ListBoxItem中和文本菜單

<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的Command?你是否也想爲每個項目或列表顯示這個ContextMenu?這裏是爲整個列表設置的。 – Ucodia

+0

您可以更具體或給我更多有關您的解決方案的細節? – radzio

+0

@Ucodia:爲什麼選擇整個列表?看起來像是在ListBox.ItemTemplate中設置的? – sll

回答

5

首先,奇怪的是你試圖設置Command和Click事件。你應該設置一個或另一個。也許操作被禁用的事實是因爲你正在設置一個值爲CanExecute = false的Command;

而不是寫一個DataTemplate的,你可以嘗試設置ItemContainerStyle爲ListBoxItem的是這樣的:

<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的實例的文本菜單所以它會在右側顯示控制菜單。

+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

你只需要改變命令頭和處理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中已經有一個MenuContext。你可以試試

<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>