2011-09-26 5 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

Resources에 상황에 맞는 메뉴를 추가하고 작동 중입니다. 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> 
관련 문제