2010-12-11 3 views
6

WPF에서 내 Listbox에 대한 컨텍스트 메뉴를 원합니다. 전체 목록 상자의 컨텍스트 메뉴를 사용하여 작업을 수행했지만 항목을 클릭하지 않아도 컨텍스트 메뉴를 표시하려면 richt- 클릭 할 수 있습니다.C# : ListboxItems (WPF)에 대한 목록 상자 컨텍스트 메뉴

Google에서 뭔가를 찾았지만 제대로 작동하지 않았습니다. 내가없이 피곤하고 다른 things- 아무것도하지만이 일을 많은 다른 튜토리얼에서와 같은 다른 요소와 함께,

<ListBox Margin="5" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding Name}" Click="MenuItemName_Click"/> 
         <MenuItem Header="{Binding Capital}" Click="MenuItemCapital_Click"/> 
         <MenuItem Header="{Binding Population}" Click="MenuItemPopulation_Click"/> 
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

내가 예와 같이 된 본체와 그것을 시도 :

나는 이런 식으로 뭔가를 시도했다. 내 목록 상자 항목 :(

에 대한의 ContextMenu 나중에 나는이 같은 시도하지 :

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <ListBoxItem> 
      <ListBoxItem.ContextMenu> 
       <ContextMenu> 
        <MenuItem/> 
       </ContextMenu> 
      </ListBoxItem.ContextMenu> 
     </ListBoxItem> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

을하지만 너무 작동하지 않았다

사람이 : 예 작업/나에게 힌트를 줄 수 있습니다.?

이 아닌 DataTemplate, 당신은

+0

정확히 어떤 작동하지 않는 이유는 무엇입니까? 좀 더 구체적으로 설명해야합니다 ... VS의 출력 창에서 바인딩 오류를 확인 했습니까? –

답변

13

나는 ListBoxItem의 스타일로 ContextMenu을 설정합니다 감사합니다 :

<ListBox Name="simpleListBox" 
     ItemsSource="{Binding SimpleList}" 
     DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         ... 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

@Thomas, 나는 MenuItem에서 RelayCommand로 명령을 바인딩하지만 RalayCommand는 결코 호출되지 않습니다. – SubmarineX

+0

@SubmarineX, 출력 창에서 바인딩 오류를 볼 수 있습니까? "지배적 인 FrameworkElement를 찾을 수 없습니다 ..."와 같은 것을 발견하면 [this solution] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-on-the-datacontext-is-not-inherited/ –

+0

@ThomasLevesque 감사합니다. 이제 알았습니다. ListBoxItem의 datacontext는 ListBox의 datacontext가 아니므로 ListBoxItem의 datacontext에 명령을 바인딩 한 다음 messager를 통해 목록 상자의 datacontext에 알립니다. 그리고 나중에 당신의 해결책을 보게 될 것입니다. – SubmarineX