- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个绑定(bind)到字符串集合的菜单项列表。单击这些菜单项中的每一个时,都会触发我的“打开”命令。这一切都很好。
如何省略每个菜单项旁边的 Ctrl+O?
下面是我的 XAML。
<MenuItem Header="Recent packages" ItemsSource="{Binding Source={x:Static p:Settings.Default}, Path=RecentItems}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem CommandTarget="{Binding}" Command="ApplicationCommands.Open" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}">
<MenuItem.Header>
<TextBlock>
<TextBlock.Text>
<Binding StringFormat="{}{0}" />
</TextBlock.Text>
</TextBlock>
</MenuItem.Header>
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
最佳答案
How do I use StringFormat to get rid of the InputGesture text when a UI element is bound to a command?
你不知道。 Header
属性与手势文本的显示无关,对其应用 StringFormat
或其他任何内容都不会产生任何影响。
您可以使用 Hide or disable Input Gesture Text in wpf 中的方法, 建议 the comment above .在这种情况下,您可能只需将文本颜色的 alpha 设置为 0。但更简单的方法是将 MenuItem.InputGestureText
值设置为 ""
(注意空格……如果您使用空字符串,WPF 将忽略它)。
综上所述,我认为您的处理方式是错误的。
您首先获得手势文本的原因是因为您使用 ApplicationCommands.Open
作为菜单项的命令。但这并不是真正正确的命令。您已经将其用于"file"菜单中的“打开包...”命令。所以这实际上不是同一个命令,是吗?
即使您隐藏了输入的手势文本,实际上也不会删除 手势。它只是没有在菜单中记录它。那么,当用户按下 Ctrl+O 时,您希望执行这三个菜单项中的哪一个?您如何期望 WPF 确保它会执行您想要的命令?
在我看来,您应该定义自己的 ICommand
以与这些菜单项一起使用,并将 ApplicationsCommand.Open
命令排除在外。为您确实需要键盘快捷键的一个命令保留它。使用您自己的 ICommand
(例如 RoutedUICommand
),您可以简单地不定义输入手势/键盘快捷键,然后菜单中将不会显示任何内容。
关于c# - 当 UI 元素绑定(bind)到命令时,如何使用 StringFormat 去除 InputGesture 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644798/
我有一个绑定(bind)到字符串集合的菜单项列表。单击这些菜单项中的每一个时,都会触发我的“打开”命令。这一切都很好。 如何省略每个菜单项旁边的 Ctrl+O? 下面是我的 XAML。
我是一名优秀的程序员,十分优秀!