Frage

Ich stelle das ein .Content Wert eines Labels für eine Zeichenfolge, die Unterstriche enthält;Der erste Unterstrich wird als Zugriffstaste interpretiert.

Ohne die zugrunde liegende Zeichenfolge zu ändern (durch Ersetzen aller _ mit __), gibt es eine Möglichkeit, den Beschleuniger für Labels zu deaktivieren?

War es hilfreich?

Lösung

Wenn Sie einen TextBlock als Inhalt des Etiketts verwenden, werden in dessen Text keine Unterstriche berücksichtigt.

Andere Tipps

Sie können die RecognizesAccessKey-Eigenschaft des ContentPresenter überschreiben, der in der Standardvorlage für die Bezeichnung enthalten ist.Zum Beispiel:

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

Warum nicht so?

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

Benutze einen <TextBlock> ... </TextBlock>anstatt <Label> ... </Label> um den genauen Text auszudrucken, der Unterstriche enthält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top