如何禁用WPF MenuItem中的助记符?

时间:2013-11-04 14:04:03

标签: c# wpf menuitem

我有动态字符串显示为MenuItem的标题,有时包含'_'。 WPF将下划线视为助记符的标志,但我不希望如此。如何禁用它?

2 个答案:

答案 0 :(得分:6)

在尝试线程WPF listbox. Skip underscore symbols in strings中的所有解决方案之后,我似乎没有在MenuItems上工作,我这样做了:

public class EscapeMnemonicsStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string str = value as string;
        return str != null ? str.Replace("_", "__") : value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

另一种解决方案是将菜单文本放在MenuItem内,并调整属性。

如果在代码中构建var menuItem = new MenuItem(); var menuHeader = new Textbox(); menuHeader.Text = "your_text_here"; menuHeader.IsReadOnly = true; menuHeader.Background = Brushes.Transparent; menuHeader.BorderThickness = new Thickness(0); menuItem.Header = menuHeader; menuItem.ToolTip = "your detailed tooltip here"; menuItem.Click += YourEventHandlerHere; yourMenu.Items.Add(menuItem); ,它将如下所示:

<MenuItem Name="menuDynamic" Click="menuDynamic_Click">
    <MenuItem.Header>
        <TextBox Name="dynamicMenu"
                 Text="With_Underscore"
                 IsReadOnly="True"
                 Background="Transparent"
                 BorderThickness="0" />
    </MenuItem.Header>
</MenuItem>

如果你的菜单是在XAML中而且它只是动态的文本,它将如下所示:

dynamicMenu.Text = "what_ever";

然后您的代码可以在需要时动态设置 % limit cputime unlimited filesize unlimited datasize unlimited stacksize 10240 kbytes coredumpsize 0 kbytes memoryuse unlimited vmemoryuse unlimited descriptors 4096 memorylocked 64 kbytes maxproc 1024