在WPF中,如何在保持键盘快捷键的同时右对齐菜单项?

时间:2010-10-10 06:36:09

标签: c# wpf keyboard-shortcuts menuitem justify

我最近更改了我的XAML,以获得右对齐菜单项的功能,例如在下图中设置字体大小:

File  Configure  Help
      +-------------+  +----+
      | Font size > |->|  8 |
      | Speed     > |  | 10 |
      +-------------+  | 12 |
                       +----+

显然,基于该图形,我不会很快从技术角色转变为平面设计:-)更多只是为了说明我的意思。

下面的原始XAML没有对值进行右对齐

<MenuItem Header="_Configure">
    <MenuItem Header="_Font size   ">
        <MenuItem Header="_8" Click="menuConfigFontSz8" />
        <MenuItem Header="1_0" Click="menuConfigFontSz10" />
        <MenuItem Header="1_2" Click="menuConfigFontSz12" />
    </MenuItem>
    :
</MenuItem>
相反,它给了我:

File  Configure  Help
      +-------------+  +----+
      | Font size > |->| 8  |
      | Speed     > |  | 10 |
      +-------------+  | 12 |
                       +----+

因此,为了获得正确的理由,我将其改为:

<MenuItem Header="_Configure">
    <MenuItem Header="_Font size   ">
        <MenuItem Click="menuConfigFontSz8">
            <MenuItem.Header>
                <TextBlock HorizontalAlignment="Right">_8</TextBlock>
            </MenuItem.Header>
        </MenuItem>
        <MenuItem Click="menuConfigFontSz10">
            <MenuItem.Header>
                <TextBlock HorizontalAlignment="Right">1_0</TextBlock>
            </MenuItem.Header>
        </MenuItem>
        <MenuItem Click="menuConfigFontSz12">
            <MenuItem.Header>
                <TextBlock HorizontalAlignment="Right">1_2</TextBlock>
            </MenuItem.Header>
        </MenuItem>
    </MenuItem>
    :
</MenuItem>

但是,我发现我已经失去了做 Alt C F 0 的快捷功能选择字体大小10(它只是0位不再有效,前两位仍然正常。)

相反,它在菜单中为我提供了文字1_0,而不是允许我使用0作为选择项目的快捷方式:

File  Configure  Help
      +-------------+  +-----+
      | Font size > |->|  _8 |
      | Speed     > |  | 1_0 |
      +-------------+  | 1_2 |
                       +-----+

如何保持菜单文本的正确理由,但仍允许使用加速器?

1 个答案:

答案 0 :(得分:2)

当您向MenuItem(和Button)添加加速器时,WPF会自动将TextBlock添加到您的MenuItem,这可能会阻止您的代码工作。如果您查看此answerquestion,就可以看到此效果。

如果您的资源中没有覆盖默认TextBlock行为的通用TextBlock样式,则此代码可以解决此问题。

<MenuItem Header="_Configure"> 
  <MenuItem Header="_Font size"> 
    <MenuItem Click="menuConfigFontSz8" Header="_8" HorizontalAlignment="Right"/>
    <MenuItem Click="menuConfigFontSz10" Header="1_0" HorizontalAlignment="Right"/>
    <MenuItem Click="menuConfigFontSz12" Header="1_2" HorizontalAlignment="Right"/>
</MenuItem>