Desativar o WPF etiqueta de tecla aceleradora (texto sublinhado está em falta)
-
09-06-2019 - |
Pergunta
Eu sou a definição do .Content
valor de um Rótulo para uma seqüência de caracteres que contém caracteres de sublinhado;o primeiro carácter de sublinhado está sendo interpretado como uma tecla de atalho.
Sem alterar o subjacente de seqüência de caracteres (por substituição de todos _
com __
), existe uma maneira de desativar o acelerador para Rótulos?
Solução
Se você usar um TextBlock como o Conteúdo do Rótulo, o Texto não vai absorver ressalta.
Outras dicas
Você pode substituir o RecognizesAccessKey propriedade do ContentPresenter que é o modelo padrão para o rótulo.Por exemplo:
<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>
Por que não assim?
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;
}
}
}
Usar um <TextBlock> ... </TextBlock>
em vez de <Label> ... </Label>
para imprimir o texto exato, o que é ter sublinhados.