Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF样式事件设置器单击事件错误_Wpf_Visual Studio_Xaml_Visual Studio 2015 - Fatal编程技术网

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编辑器。谢谢你的帮助!:)