Deshabilitar WPF etiqueta de la tecla de aceleración (texto subrayado falta)

StackOverflow https://stackoverflow.com/questions/40733

  •  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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top