2011-08-12 97 views
1

哪個WPF控件允許在每個項目上列出項目和上下文菜單?直到現在,我一直在使用ListBox,但好像沒有簡單的方法將上下文菜單添加到它的項目中。相反,我正在將ListBox更改爲另一個允許上下文菜單的控件。WPF列表和上下文菜單

我現在使用的唯一ListBox屬性/方法是「SelectedIndex」和「SelectedItem」。只要建議的控制支持這個或有另一個替代品,我應該沒問題。

+0

你可以發表你的XAML? 'ListBoxItem'具有'ContextMenu'屬性,因此它應該可以正常工作 – kenwarner

+0

@qntmfred:請參閱Meleak對我使用的XAML的文章。我以前的代碼可能沒有正確實施。 – rafale

回答

4

添加ContextMenuListBoxItem使用ItemContainerStyle

<ListBox ItemsSource="{Binding ...}"> 
    <ListBox.Resources> 
     <ContextMenu x:Key="listBoxItemContextMenu"> 
      <MenuItem Header="{Binding YourProperty}" /> 
     </ContextMenu> 
    </ListBox.Resources> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu" 
        Value="{StaticResource listBoxItemContextMenu}"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <!--...--> 
</ListBox> 
0

這個例子不使用任何約束力或類似的DataTemplates你可能會通常在實際應用中看到,但希望它有助於

<ListBox> 
     <ListBox.Items> 
      <ListBoxItem Content="Item A"> 
       <ListBoxItem.ContextMenu> 
        <ContextMenu>Delete A</ContextMenu> 
       </ListBoxItem.ContextMenu> 
      </ListBoxItem> 
      <ListBoxItem Content="Item B"> 
       <ListBoxItem.ContextMenu> 
        <ContextMenu>Delete B</ContextMenu> 
       </ListBoxItem.ContextMenu> 
      </ListBoxItem> 
      <ListBoxItem Content="Item C"> 
       <ListBoxItem.ContextMenu> 
        <ContextMenu>Delete A</ContextMenu> 
       </ListBoxItem.ContextMenu> 
      </ListBoxItem> 
     </ListBox.Items> 
    </ListBox> 
+0

所以在我的應用程序中,我不得不以編程方式將這些上下文菜單逐個添加到列表中的每個項目。沒有更好的解決方法嗎?也許除了ListBox還有另一個控件? – rafale

1

可以使用DataGrid控件在WPF上市。您還可以添加文本菜單像

<DataGrid AutoGenerateColumns="False" Height="200" Width="200" > 
     <DataGrid.ContextMenu> 
     <ContextMenu > 
      <MenuItem Header="Menu Header" Click="MenuItem_Click" /> 
     </ContextMenu> 
     </DataGrid.ContextMenu> 
</DataGrid> 

另請參閱Create contextmenus for datagrid rows