• WPF-MenuItem只显示最后一个Icon


    我在配置一个ContextMenu,想实现动态后台添加MenuItem。


    然而我遇到了这个问题:

    无论是写死icon,还是后台赋值,都只有最后一个icon是显示的····

    经过一番摸索,找到了个解决方案。

    <ContextMenu ItemsSource="{Binding TabMenuModels}" Style="{StaticResource MaterialDesignContextMenu}">
        <ContextMenu.ItemContainerStyle>
    
            <Style BasedOn="{StaticResource MaterialDesignMenuItem}" TargetType="MenuItem">
                <Style.Resources>
    
                    <materialDesign:PackIcon
                        x:Key="imgCTX"
                        Width="16px"
                        Height="16px"
                        x:Shared="false"
                        Kind="{Binding Path=FontIcon}" />
    
                </Style.Resources>
    
                <Setter Property="FontFamily" Value="Microsoft YaHei" />
                <Setter Property="Icon" Value="{StaticResource imgCTX}" />
                <Setter Property="Header" Value="{Binding MenuHeader}" />
                <Setter Property="Command" Value="{Binding ExcuteCommand}" />
            </Style>
        </ContextMenu.ItemContainerStyle>
    </ContextMenu>
    

    icon 设置成资源然后使用x:share=false即可(图片一样)。

    实现后的效果:

    目前找到比较合理的解释:

    每个UI元素只能放在视觉树中的一个位置。 不能在多个MenuItem上使用相同的资源控件。
    需要为每个MenuItem创建单独的资源控件。
    否则,每次将其分配给新的MenuItem时,都只是将其从一个移到下一个。
    x:share 特性设置为false时,会修改wpf检索资源的行为,为每一个请求都生成不同的实例,而不是共享实例。

    感觉还是不够清晰,至少问题解决了,希望明白原因的大佬能分享。感谢!~~

  • 相关阅读:
    js转化 保留2位小数
    python练习:打印九九乘法表
    PyCharm常用快捷键及工具
    python关键字
    Python学习资源
    Jira项目导入,被导入项目与目的系统数据类型不一致导入不成功的解决方案
    压测的时候到底要不要加集合点?
    Java Vuser协议JDBC脚本编写(MySQL)
    eclipse工具使用
    oracle忘记sys,system密码的解决方法
  • 原文地址:https://www.cnblogs.com/ma-nong01/p/14799225.html
Copyright © 2020-2023  润新知