WPF 样式不能在多个控件上工作

WPF Style can't work on multiple controls

我在我的控件上使用 wpf 样式,这样我就可以同时在多个控件上使用一个样式。它通常有效。例如,我制作了一个 saveButtonStyle 并将其应用到我应用程序的每个保存按钮上。但它不适用于 MenuItems。 我为我的菜单项制作了一个样式,其中在项目旁边包含一个图标。 这是它的一个屏幕截图。

您看到 Datagrid 有一个 ContextMenu,其中有多个菜单项。在这种情况下,请注意设置警报。它有一个图标。这个设置警报菜单项也在这个旁边的另一个菜单数据网格中。当我点击那个 它也出现了

但问题是当我右键单击回到另一个数据网格时,图标消失了,不会再回来了。这是屏幕截图

这是我做的款式

  <Style x:Key="menuItemAlert" TargetType="{x:Type MenuItem}">
            <Setter Property="Icon">
                <Setter.Value>
                    <Image Source="Content/AlertIcon.png" Width="20" Height="20" />
                </Setter.Value>
            </Setter>
        </Style>

下面是我如何将它应用到我的控件中

<MenuItem x:Name="customerContextMenuSetAlarm" Header="SetAlarm"  Style="{StaticResource menuItemAlert}" Click="customerContextMenuSetAlarm_Click"/>

你知道为什么会这样吗?

style menuItemAlert 只创建一个 Image 的实例,并且只能在一个地方显示它。为了克服这个问题,为 Image.

创建一个单独的非共享资源
<Image x:Key="AlertIcon" x:Shared="False" Source="Content/AlertIcon.png" Width="20" Height="20" />

<Style x:Key="menuItemAlert" TargetType="{x:Type MenuItem}">
    <Setter Property="Icon" Value="{StaticResource AlertIcon}"/>
</Style>