禁用WPF标签加速键(缺less文本下划线)

我将Label的.Content值设置为包含下划线的string; 第一个下划线被解释为一个加速键。

没有改变底层的string(通过用__replace所有的_ ),有没有办法来禁用标签加速器?

如果使用TextBlock作为标签的内容,则其文本不会吸收下划线。

您可以覆盖该标签的默认模板中的ContentPresenter的RecognizesAccessKey属性。 例如:

 <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Grid.Resources> <Style x:Key="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" TargetType="Label"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Label"> <Border> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="False" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Grid.Resources> <Label>_This is a test</Label> </Grid> </Page> 

使用<"Text Block">"<"/Text Block">而不是<"label"><"/label">来打印具有下划线的确切文本。

为什么不喜欢这个?

 public partial class LabelEx : Label { public bool PreventAccessKey { get; set; } = true; public LabelEx() { InitializeComponent(); } public new object Content { get { var content = base.Content; if (content == null || !(content is string)) return content; return PreventAccessKey ? (content as string).Replace("__", "_") : content; } set { if (value == null || !(value is string)) { base.Content = value; return; } base.Content = PreventAccessKey ? (value as string).Replace("_", "__") : value; } } }