Deaktivieren Sie die WPF-Label-Beschleunigertaste (Textunterstrich fehlt)
-
09-06-2019 - |
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?
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.