wpf中Menu菜单项多个新建项如何处理

saybookcat 2010-11-01 01:08:32
MenuResources.xaml 资源文件中定义的菜单有多个新建的项 command对应的都是新建的命令New
 <ContextMenu x:Key="AddMenu">  
<MenuItem Header="新建文件夹"
Command="ApplicationCommands.New">
</MenuItem>

<MenuItem Header="新建文本文件"
Command="ApplicationCommands.New">
</MenuItem>
<MenuItem Header="新建word"
Command="ApplicationCommands.New">
</MenuItem>
</ContextMenu>


显示的窗体里定义

<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New"
CanExecute="FolderCanAdd"
Executed="AddFolder" />
<CommandBinding Command="ApplicationCommands.New"
CanExecute="TxtCanAdd"
Executed="AddTxt" />
<CommandBinding Command="ApplicationCommands.New"
CanExecute="WordCanAdd"
Executed="AddWord" />
</Window.CommandBindings>


由于定义了相同的Command=ApplicationCommands.New 在使用CanExecute判断的时候,几个菜单项的判断互相混合了 。
不知道如何处理这种情况好
...全文
669 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangzhouchenjian 2012-07-13
  • 打赏
  • 举报
回复
请问一下,有没有人知道wpf menu子菜单里怎么添加按钮单击事件……求指导……
saybookcat 2010-11-02
  • 打赏
  • 举报
回复
我之前没有说清楚 比如说在文件夹下可以新建,新建word和新建txt 两项,word和txt节点下 就不能建文件夹了, 不能操作的就成灰色

所以必须在操作之前就判断,通过取得点击的目标的类型,来判断哪些操作是可以执行的,
不能执行的就成灰色
比如 在文件夹上点的时候 word和txt项都是可用的,新建文件夹项就是灰色的
在word 和 txt 类型上点时 都是不可用 都是灰色的

楼上的可以在菜单里写事件,可以实现各项功能 。
这个地方,我遇到的问题是 在菜单弹出的时候 判断哪些操作是可用的时候,由于三项都上使用的New操作,导致注册的三个判断事件 的判断逻辑相混合了
不能正确判断

bloodish 2010-11-02
  • 打赏
  • 举报
回复

private void FolderCanAdd(object sender, CanExecuteRoutedEventArgs e)
{
MenuItem mi = e.Source as MenuItem
if(mi.Header == "新建文件夹")
{
//todo
}
else if(mi.Header == "新建word")
{
//todo
}
//...其他判断
}

saybookcat 2010-11-02
  • 打赏
  • 举报
回复
自顶 ,求帮助
saybookcat 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bloodish 的回复:]

回你这个问题真是够累的,以后问问题把想问的都一次问清楚.

C# code

[/Quote]

多谢bloodish耐心的解答
bloodish 2010-11-02
  • 打赏
  • 举报
回复
回你这个问题真是够累的,以后问问题把想问的都一次问清楚.

InitializeComponet()之后,你就可以拿Resource了.
这时可以注册事件


public MainWindow()
{
InitializeComponent();

ContextMenu menu = this.Resources["AddMenu"] as ContextMenu;
menu.ContextMenuOpening += (s, e) =>
{
//to do
};
}
saybookcat 2010-11-02
  • 打赏
  • 举报
回复
多谢,这个思路可以
我的ContextMenu 是一个单独的资源文件 这里注册不了事件
ContextMenu 的ContextMenuOpening事件该在哪里注册好呢
bloodish 2010-11-02
  • 打赏
  • 举报
回复
那就用ContextMenuOpening
saybookcat 2010-11-02
  • 打赏
  • 举报
回复
SubmenuOpened是MenuItem的事件,处理它的子菜单时使用的
ContextMenu 项没有SubmenuOpened .若是这样处理还要包一层MenuItem
bloodish 2010-11-02
  • 打赏
  • 举报
回复
处理SubmenuOpened事件,按你当前类型(文件夹,word,text)设置MenuItem的IsEnable属性.
saybookcat 2010-11-01
  • 打赏
  • 举报
回复
急求,希望有高手来解答下

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧