我的应用程序中有一个菜单直接从外部绑定的字符串列表中获取其内容(ItemsSource = Settings.RecentlyLoadedFiles
)。这些字符串是文件名,当用户点击菜单中的某个项目时,该文件将被加载。禁用MenuItems的下划线解释
<ui:SplitButton
Grid.Column="0"
Command="{Binding LoadLogCommand}" ToolTip="Load log" ToolTipService.ShowOnDisabled="True"
Focusable="False"
ItemsSource="{Binding Settings.RecentlyLoadedFiles}"
MenuItem.Click="SplitButton_Click">
<ui:SplitButton.Icon>
<ui:MenuIconImage Source="/Images/folder_open.png"/>
</ui:SplitButton.Icon>
</ui:SplitButton>
现在文件名可以很容易地在他们的下划线和WPF,因为认为它可能是一个快捷键,这是不显示。不是。但我怎么能告诉菜单?
有没有简单的方法来加倍这些下划线来显示其中之一。这份名单来自一个与此类事情无关的来源。
我是否需要编写一个自定义转换器将该列表转换为具有加倍下划线的字符串列表才能禁用该功能?
或者我需要从某处为菜单项复制整个模板,以在其中间的某个位置设置不同的特定属性?
是不是有一些附加属性或任何传播到解释将被完成的地方?
Duplicate http://stackoverflow.com/questions/19769398/how-do-i-disable-mnemonics-in-a-wpf-menuitem/32998315#32998315 –
有点解释:'MenuItem'包含一个'ContentPresenter '在它的'ControlTemplate'中,'RecognizesAccessKey'设置为'true'。我的观察是,它所做的是检测内容是什么,如果它是一个包含_的字符串,则它将内容包装在一个AccessText元素中,并将AccessKey设置为下划线后面的字符。我不知道有任何可能影响此功能的附加属性。在ContentPresenter之后将'RecognizesAccessKey'改为false也没有效果。下面给出的答案是一个可能的解决方案。 –
@LonelyPixel - 你必须重写默认的MenuItem模板,并将'RecongnizesAccessKey'设置为'False',它应该可以工作。也许你可以在菜单资源中放置MenuItem的默认样式,这样你就不必为所有菜单项显式覆盖。 –