当多个控件想要使用同样的ContextMenu时,使用Style来设置肯定是更加简便的方法。
但在WPF中,倘若直接在Style中定义ContextMenu时,会出现错误:
定义代码:
<Setter Property="ContextMenu"><Setter.Value><ContextMenu><MenuItem Header="全选"/><MenuItem Header="全不选"/><Separator /><MenuItem Header="删除" Click="removeRight_Button_Click" /><<Separator /><MenuItem Header="清空" Click="clear_Button_Click" /></ContextMenu></Setter.Value></Setter>
报错:
System.Windows.Markup.XamlParseException:““设置 connectionId 时引发了异常。”,行号为“156”,行位置为“42”。” 内部异常 InvalidCastException: 无法将类型为“System.Windows.Controls.MenuItem”的对象强制转换为类型“System.Windows.Controls.TabItem”。
经过仔细检查发现,给MenuItem关联了事件处理器,就无法通过编译,直接报错。
但总不能真的真的去每个控件都写一个ContextMenu吧……
好在绝大多数问题都有人已经发现过了,在不存在的网站上一搜索,轻松找到解决问题的方式——将ContextMenu当做资源,然后再调用:
<ContextMenu x:Key="ListBox_ContextMenu"><MenuItem Header="全选"/><MenuItem Header="全不选"/><Separator /><MenuItem Header="删除" Click="removeRight_Button_Click" /><Separator /><MenuItem Header="清空" Click="clear_Button_Click" /></ContextMenu><Style TargetType="ListBox"><Setter Property="ContextMenu" Value="{StaticResource ListBox_ContextMenu}"/></Style>
原帖链接:
