首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF样式EventSetter单击事件错误

WPF样式EventSetter单击事件错误
EN

Stack Overflow用户
提问于 2015-08-24 14:47:25
回答 2查看 4.3K关注 0票数 1

我正在尝试为上下文菜单创建一个样式资源,我将在代码中动态分配给扩展程序。我希望在样式中为上下文菜单中的菜单项设置一个单击事件侦听器,但我正在接收错误,无法找到解决方案。

错误

  • 不能在样式的目标标记上指定事件'Click‘。使用EventSetter代替。
  • 属性“Handler”的无效值:'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.XmlValue‘

我已经尝试过这个解决方案,但不幸的是,它对我没有任何影响。

参考资料:WPF ListView SelectionChanged inside style does not work. EventSetter either

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-24 15:12:14

它不能工作的原因是您不能让style内联地使用EventSetter (即在控件的样式内,或者在您的情况下,在另一个样式中)。您可以通过将MenuItem样式放入它自己的Resource来解决这个问题。

见下文:

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2015-08-24 17:24:20

由于我无法编辑自己的问题,这是基于"d.moncada"的公认答案的最终解决方案。

代码语言:javascript
复制
    <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>

编码愉快。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32185224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档