禁用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; } } }