[英]how to right click on item from Listbox and open menu on WPF
我有包含文件的列表框,我想能夠右鍵單擊並打開像刪除這樣的菜單,以便從列表框中刪除文件。
目前我右鍵單擊列表框中的項目后有此功能
private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
然后在右鍵單擊后在XAML Delete菜單中實現
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"/>
</ContextMenu>
</ListBox.ContextMenu>
從我的ListBox中刪除文件的功能:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (listBoxFiles.SelectedIndex == -1)
{
return;
}
//string filePath = (listBoxFiles.SelectedItem).ToString();
int index = listBoxFiles.SelectedIndex;
listBoxFiles.Items.RemoveAt(index);
}
您已經有一個帶有標記的上下文菜單。
如果要執行某些操作,其中一種方法是檢查菜單的Click功能中單擊了哪個項目。 例如,您有下一個列表框:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
功能可能是下一個:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1) return;
// Hypothetical function GetElement retrieves some element
var element = GetElement(someListBox.SelectedIndex);
// Hypothetical function DeleteElement
DeleteElement(element);
}
2012年3月5日更新:
這是列表框的另一種變體。 您可以不將上下文菜單添加到列表框,而是添加到列表框項目。 例如:
<ListBox Name="someListBox" MouseDown="someListBox_MouseDown">
<ListBox.Resources>
<!--Defines a context menu-->
<ContextMenu x:Key="MyElementMenu">
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
<!--Sets a context menu for each ListBoxItem in the current ListBox-->
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContextMenu" Value="{StaticResource MyElementMenu}"/>
</Style>
</ListBox.Resources>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
1)當您單擊列表框中的空白區域時,此功能將取消選擇所有項目:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
2)單擊lisboxt項時,它為藍色。 當您右鍵單擊列表框項目時,它仍然是藍色,但如果出現上下文菜單,列表框項目將變為灰色,可能是因為此項目失去焦點。
3)刪除功能正常:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
你寫的時候不需要listBoxFiles_PreviewMouseRightButtonDown
<ListBox>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"></MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
右鍵單擊后它已經工作了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.