Deshabilitar WPF etiqueta de la tecla de aceleración (texto subrayado falta)
-
09-06-2019 - |
Pregunta
Estoy configurando el .Content
el valor de una Etiqueta a una cadena que contiene caracteres de subrayado;el primer subrayado es interpretada como una tecla de aceleración.
Sin cambiar el subyacente de la cadena (por la sustitución de todos los _
con __
), hay una manera de desactivar el acelerador de Etiquetas?
Solución
Si utiliza un Bloque como el Contenido de la Etiqueta, el Texto de la misma, no absorberán subraya.
Otros consejos
Usted podría anular la RecognizesAccessKey propiedad de la ContentPresenter que es la plantilla por defecto de la etiqueta.Por ejemplo:
<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 qué no es así?
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;
}
}
}
El uso de un <TextBlock> ... </TextBlock>
en lugar de <Label> ... </Label>
para imprimir el texto exacto que está teniendo subraya.