我有包含文件的列表框,我想能够右键单击并打开像删除这样的菜单,以便从列表框中删除文件.
目前我右键单击列表框中的项目后有此功能
private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
然后我在右键单击后在XAML删除菜单中实现
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"/>
</ContextMenu>
</ListBox.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
从我的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);
}
Run Code Online (Sandbox Code Playgroud)
Tar*_*huk 31
您已经有一个带有标记的上下文菜单.
如果要执行某些操作,其中一种方法是检查菜单的Click功能中单击了哪个项目.例如,您有下一个列表框:
<ListBox Name="someListBox">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="MenuItemDelete_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
<ListBoxItem>...</ListBoxItem>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
功能可能是下一个:
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);
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
1)当您单击列表框中的空白区域时,此功能将取消选择所有项目:
private void someListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
someListBox.UnselectAll();
}
Run Code Online (Sandbox Code Playgroud)
2)单击lisboxt项时,它为蓝色.当你右键点击列表框中的项目,它仍然是蓝色的,但如果出现一个上下文菜单,列表框项目变得灰色,也许是因为这个项目失去焦点.
3)删除功能正常:
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
if (someListBox.SelectedIndex == -1)
{
return;
}
someListBox.Items.RemoveAt(someListBox.SelectedIndex);
}
Run Code Online (Sandbox Code Playgroud)
小智 2
listBoxFiles_PreviewMouseRightButtonDown
当你写的时候不需要
<ListBox>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete"></MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
右键单击后它已经可以工作了
| 归档时间: |
|
| 查看次数: |
33604 次 |
| 最近记录: |