【问题标题】:Using underscores in WPF menu items when binding绑定时在 WPF 菜单项中使用下划线
【发布时间】:2016-07-01 04:08:29
【问题描述】:

我创建了一个最近的文件菜单项,我将一组最近的文件视图模型绑定到该菜单项。

<MenuItem Header="_Recent Files" ItemsSource="{Binding RecentFiles}" Command="{x:Static pm:MainWindow.RecentFileListCommand}">
    <MenuItem.ItemContainerStyle>
        <Style>
            <Setter Property="MenuItem.Header" Value="{Binding}"/>
            <Setter Property="MenuItem.Command" Value="{x:Static pm:MainWindow.RecentFileOpenCommand}"/>
            <Setter Property="MenuItem.CommandParameter" Value="{Binding FilePath}"/>
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

我希望对列表进行编号,并且希望将这些数字用作快捷方式(Visual Studio 正是这样做的)。我的视图模型有一个数字字段和名称字段。我重写了 ToString() 方法以返回包含下划线的标题:

return string.Format("_{0} {1}", Number, FilePath);

但是,当绑定时,下划线被视为文字并显示为标题文本的一部分(而不是快捷方式)。我也尝试使用 HeaderStringFormat 没有运气:如何让 WPF 将下划线视为快捷方式而不是文字字符串?

【问题讨论】:

  • 您可以尝试为 menuitem 提供一个带有 AccessText 控件的 ContentTemplate,as in this answer(这是一个按钮,但 MenuItem 也是一个 ContentTemplate 属性——继承自同一个祖先类 IIRC )。

标签: c# wpf mvvm


【解决方案1】:

可以尝试返回 AccessText,尽管它可能会破坏关注点分离。

正如Matthew Whited 所述,更简洁的方法是仅返回字符串并使用转换器将其转换为AccessText。或者使用HeaderTemplate 并在那里创建它。

【讨论】:

  • 如果你只是想从视图模型中返回一个字符串,你不能只使用 TypeConverter 来更改为AccessText吗?
  • 我想你会想要一个值转换器,但是是的,这可能工作得很好。
  • 是的...我正试图修正我的评论但没时间了 :)
  • 谢谢,我已经在使用 ValueConverter 来用省略号截断文件路径。我没有返回字符串,而是将其更改为返回 AccessText,现在它可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2011-04-19
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多