Désactiver la touche accélératrice d'étiquette WPF (le trait de soulignement du texte est manquant)

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

  •  09-06-2019
  •  | 
  •  

Question

je règle le .Content valeur d'un Label dans une chaîne contenant des traits de soulignement ;le premier trait de soulignement est interprété comme une touche accélératrice.

Sans changer la chaîne sous-jacente (en remplaçant tous _ avec __), existe-t-il un moyen de désactiver l'accélérateur pour les étiquettes ?

Était-ce utile?

La solution

Si vous utilisez un TextBlock comme contenu de l'étiquette, son texte n'absorbera pas les traits de soulignement.

Autres conseils

Vous pouvez remplacer la propriété RecognizesAccessKey du ContentPresenter qui se trouve dans le modèle par défaut de l'étiquette.Par exemple:

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

Pourquoi pas comme ça ?

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

Utiliser un <TextBlock> ... </TextBlock>au lieu de <Label> ... </Label> pour imprimer le texte exact, qui comporte des traits de soulignement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top