我正在尝试使用Style为ContextMenu中的所有MenuItem设置Icon
<Grid>
<Button Content="Open Context Menu">
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="Click Me"/>
<Setter Property="Icon">
<Setter.Value>
<Ellipse Width="16" Height="16" Fill="Red"/>
</Setter.Value>
</Setter>
</Style>
</ContextMenu.Resources>
<MenuItem/>
<MenuItem/>
</ContextMenu>
</Button.ContextMenu>
</Button>
因此,只有ContextMenu中的最后一个MenuItem会获得一个Ellipse图标
如果我为每个MenuIcon手动设置Icon,我会得到预期的结果:
<Grid>
<Button Content="Open Context Menu">
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="Click Me"/>
</Style>
</ContextMenu.Resources>
<MenuItem>
<MenuItem.Icon>
<Ellipse Width="16" Height="16" Fill="Red"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem>
<MenuItem.Icon>
<Ellipse Width="16" Height="16" Fill="Red"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
知道可能导致此行为的原因以及解决方法吗?
我知道有一个类似的问题here,但它没有直接解决我的问题。
更新:我在similar question找到了解决方案。
关键是使用x:Shared="false"
:
<Grid>
<Button Content="Open Context Menu">
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<Ellipse x:Key="MenuIcon" x:Shared="false"
Width="16" Height="16" Fill="Red"/>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="Click Me"/>
<Setter Property="Icon" Value="{StaticResource MenuIcon"/>
</Style>
</ContextMenu.Resources>
<MenuItem/>
<MenuItem/>
</ContextMenu>
</Button.ContextMenu>
</Button>
我错误地认为它不起作用/适用于我的情况
因为我在KaXaml进行测试,但不支持此功能。
答案 0 :(得分:2)
尝试添加
X:共享=&#34;假&#34;
(请注意,它在VS中有效但在Kaxaml中无效:p)