7

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

4

2 回答 2

6

在尝试了线程WPF 列表框中的所有解决方案之后。跳过字符串中的下划线符号,这似乎不适用于 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();
    }
}
于 2013-11-04T14:04:51.107 回答
2

另一种解决方案是将菜单文本放入TextBox具有调整属性的 a 中。

如果构建您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);

如果您的菜单在 XAML 中并且只是动态的文本,则它看起来像这样:

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

然后您的代码可以dynamicMenu.Text = "what_ever";在需要时动态设置。

于 2015-10-07T17:06:03.853 回答