WPF样式事件设置器单击事件错误
我正在尝试为上下文菜单创建一个样式资源,我正在代码中动态地将其分配给扩展器。我希望为样式中的关联菜单中的菜单项设置单击事件侦听器,但我收到了无法找到解决方案的错误 错误:WPF样式事件设置器单击事件错误,wpf,visual-studio,xaml,visual-studio-2015,Wpf,Visual Studio,Xaml,Visual Studio 2015,我正在尝试为上下文菜单创建一个样式资源,我正在代码中动态地将其分配给扩展器。我希望为样式中的关联菜单中的菜单项设置单击事件侦听器,但我收到了无法找到解决方案的错误 错误: 无法在样式中的目标标记上指定事件“单击”。使用 而是一个事件设定者 属性“Handler”的值无效: 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.XmlValue' <Style x:Key="LincrosContextMenu
- 无法在样式中的目标标记上指定事件“单击”。使用 而是一个事件设定者
- 属性“Handler”的值无效:
'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.XmlValue'
<Style x:Key="LincrosContextMenu" TargetType="{x:Type ContextMenu}" BasedOn="{StaticResource MetroContextMenu}"> <Style.Resources> <Style TargetType="{x:Type MenuItem}"> <Setter Property="FontSize" Value="12" /> <Setter Property="Padding" Value="0, 3, 0, 3" /> <EventSetter Event="Click" Handler="ContextMenu_MenuItem_Click"/> </Style> <Style TargetType="{x:Type Separator}"> <Setter Property="Margin" Value="6, 0, 0, 0" /> </Style> </Style.Resources> </Style> <ContextMenu x:Key="ProjectFolderContext" Style="{StaticResource ResourceKey=LincrosContextMenu}"> <MenuItem Header="Add"/> <Separator/> <MenuItem Header="Cut" /> <MenuItem Header="Copy" /> <MenuItem Header="Paste" /> <MenuItem Header="Rename" /> <Separator/> <MenuItem Header="Open Folder in File Browser" /> <Separator/> <MenuItem Header="Properties" /> </ContextMenu>
参考:它不起作用的原因是您不能拥有使用
事件设置器的样式
内联(即,在控件的样式内,或者在您的情况下,在另一个样式内)。您可以通过将菜单项
样式放入自己的资源
中来解决此问题
见下文:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="FontSize" Value="12" />
<Setter Property="Padding" Value="0, 3, 0, 3" />
<EventSetter Event="Click" Handler="ContextMenu_MenuItem_Click"/>
</Style>
<Style x:Key="LincrosContextMenu" TargetType="{x:Type ContextMenu}">
<Style.Resources>
<Style TargetType="{x:Type Separator}">
<Setter Property="Margin" Value="6, 0, 0, 0" />
</Style>
</Style.Resources>
</Style>
<ContextMenu x:Key="ProjectFolderContext" Style="{StaticResource LincrosContextMenu}">
<MenuItem Header="Add"/>
<Separator/>
<MenuItem Header="Cut" />
<MenuItem Header="Copy" />
<MenuItem Header="Paste" />
<MenuItem Header="Rename" />
<Separator/>
<MenuItem Header="Open Folder in File Browser" />
<Separator/>
<MenuItem Header="Properties" />
</ContextMenu>
</Window.Resources>
<Button Width="100" Height="75" ContextMenu="{StaticResource ProjectFolderContext}"/>
</Window>
由于我无法编辑自己的问题,这是我根据d.moncada“接受的答案得出的最终解决方案
<Style x:Key="LincrosContextMenuItem" TargetType="{x:Type MenuItem}">
<Setter Property="FontSize" Value="12" />
<Setter Property="Padding" Value="0, 3, 0, 3" />
<EventSetter Event="Click" Handler="ContextMenu_MenuItem_Click"/>
</Style>
<Style x:Key="LincrosContextMenu"
TargetType="{x:Type ContextMenu}"
BasedOn="{StaticResource MetroContextMenu}">
<Style.Resources>
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource LincrosContextMenuItem}" />
<Style TargetType="{x:Type Separator}">
<Setter Property="Margin" Value="6, 0, 0, 0" />
</Style>
</Style.Resources>
</Style>
快乐编码:) 在我完成项目后,错误似乎消失了。我想我引用的解决方案不起作用,因为我没有尝试构建项目。我想我不应该完全信任visual Studio编辑器。谢谢你的帮助!:)