[英]Using ContextMenu in TreeView
我想使用 C# 制作一个应用程序。 这是它的用户界面的一部分:
菜单栏下方的白色区域代表一个TreeView
。 当用鼠标右键单击时,我希望 Tree_View 菜单出现在白色区域的任何地方。
这是 Tree_View 对象的 XAML 代码(注意那里的foo
函数):
<MenuItem Name="Menu_Tree" Header="_Tree_View">
<MenuItem Header="_New_Scene" IsCheckable="false" Click = foo/>
<MenuItem Header="_Copy_This_Scene" IsCheckable="false"/>
<MenuItem Header="_Remove_This_Scene" IsCheckable="false"/>
<Separator />
<MenuItem Header="_New_Shot" IsCheckable="false"/>
<MenuItem Header="_Copy_This_Shot" IsCheckable="false"/>
<MenuItem Header="_Remove_This_Shot" IsCheckable="false"/>
<Separator />
<MenuItem Header="_Move_This_Shot_Up" IsCheckable="false"/>
<MenuItem Header="_Move_This_Shot_Down" IsCheckable="false"/>
</MenuItem>
这是 Tree_View 对象的 XAML 代码:
<Grid Name="TreeHolder" Column="0" Margin="20,10,10,10" Background="DimGray">
<TreeView Name="myTree" MouseRightButtonDown="something" ToolTip="Right Click to Add or Remove Scenes and Scots.">
</TreeView>
</Grid>
这是something
功能,应该通过右键点击触发:
private void something(object sender, MouseButtonEventArgs e)
{
ContextMenu cm = new ContextMenu();
//cm.Items.Add("Add a New Scene ?", ... );
Menu_Tree.ContextMenu = cm;
}
由于那里没有任何作用,我想问以下问题:
a) 如何让 Tree_view 菜单项也出现在 Tree_View 对象的白色区域?
b) 如果是这样,我将如何使其成为启用菜单,例如能够触发foo
功能?
(在其他世界中,制作菜单列表的精确副本,右键单击使其可见并使其正常工作)
我坚信这与我无法公平使用的ContextMenu
,因此我们将不胜感激。
要添加的项目是MenuItem
。 您可以像使用任何其他对象一样创建每个项目,设置其Header
属性并分配一个Click
事件处理程序。 sender
是TreeView
本身。
private void something(object sender, MouseButtonEventArgs e)
{
var cm = new ContextMenu();
var newSceneMenuItem = new MenuItem { Header = "_New_Scene" };
newSceneMenuItem.Click += OnNewSceneClick;
cm.Items.Add(newSceneMenuItem);
var treeView = (TreeView) sender;
treeView.ContextMenu = cm;
}
private void OnNewSceneClick(object sender, RoutedEventArgs e)
{
MessageBox.Show("I am a Message Box.", "New Scene clicked");
}
但是,在没有右键单击处理程序的情况下,您可以在 XAML 中更轻松地完成此操作。
<Grid Name="TreeHolder" Column="0" Margin="20,10,10,10" Background="DimGray">
<TreeView Name="myTree" ToolTip="Right Click to Add or Remove Scenes and Scots.">
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="_New_Scene" Click="foo"/>
<MenuItem Header="_Copy_This_Scene"/>
<MenuItem Header="_Remove_This_Scene"/>
<Separator />
<MenuItem Header="_New_Shot"/>
<MenuItem Header="_Copy_This_Shot"/>
<MenuItem Header="_Remove_This_Shot"/>
<Separator />
<MenuItem Header="_Move_This_Shot_Up"/>
<MenuItem Header="_Move_This_Shot_Down"/>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</Grid>
您不需要将IsCheckable
设置为false
,这已经是默认值。 您可以使用commands代替分配Click
事件处理程序,但我想这对于您的问题来说是一个太高级的话题,因为它看起来不像您正在使用 MVVM 模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.