【发布时间】:2018-04-15 23:42:45
【问题描述】:
好的,所以我们有一个最近的文件菜单选项。我们使用 MVVM 对 MenuItem 条目进行数据绑定并提供 DisplayMemberPath。但是 WPF 对字符串进行了转义,因此下划线显示为下划线而不是访问键
<MenuItem x:Name="RecentScripts" DisplayMemberPath="Caption" Header="Recent _Files" cal:Message.Attach="OpenRecentScript($orignalsourcecontext)">
<MenuItem.Icon>
<Image Source="{StaticResource IconOpen}"/>
</MenuItem.Icon>
</MenuItem>
我们也有自定义主题,但禁用 MennuItem 的样式并没有帮助 https://github.com/AndersMalmgren/FreePIE/blob/recet_files_shortcut/FreePIE.GUI/Themes/ExpressionDark.xaml#L1921
【问题讨论】:
-
可以直接绑定access text吗?
<MenuItem ...> <MenuItem.Icon> <Image Source="{StaticResource IconOpen}"/> </MenuItem.Icon> <AccessText>_0</AccessText> </MenuItem> -
您需要指定标题模板并使用应该可以解决您的问题的
Label。原因是因为默认模板使用TextBlock而TextBlock 不使用下划线。 -
但是相同的模板适用于没有数据绑定的菜单项,看截图最近的文件有它的访问文本
-
@3615 您的示例给出“使用 ItemsSource 之前,Items 集合必须为空。”
-
@Anders 是的,对,应该是 MenuItem.AccessText,但 MenuItem 不支持 AccessText。另一种方法可能是返回 AccessText 元素的值转换器,但看看你的实现它看起来并不容易,所以 ItemTemplate 似乎是最简单的方法。
标签: c# wpf mvvm data-binding caliburn.micro