在WPF内容中看不到_(下划线)

1hdlvixo  于 2023-01-06  发布在  其他
关注(0)|答案(6)|浏览(411)

一个非常简单的问题:
为什么在WPF内容中看不到_(下划线)?
例如内容

<Label Content="test_t" Name="label2"  />

显示为"testt"(下划线未显示)。

hgb9j2n6

hgb9j2n61#

标签支持助记符(也就是说,你可以使用ctrl+(键)来给它们提供焦点)。你可以使用下划线来定义助记键。
http://www.charlespetzold.com/blog/2006/01/061004.html
如果要显示下划线,请将单下划线替换为双下划线。

ia2d9nvy

ia2d9nvy2#

这是因为Label支持基于助记符的内容定义助记符,这是通过在助记符前面加上下划线来实现的(与Windows窗体中&的情况相同)。
如果要显示文字下划线,请使用双下划线:

<Label Content="test__t" Name="label2"  />
li9yvcax

li9yvcax3#

我知道我迟到了,但我相信,如果你没有标签关联到一个文本框比你应该使用文本块代替。
将控件更改为TextBlock可解决此问题,因为只有Label具有助记符支持

wfveoks0

wfveoks04#

此样式解决了您的问题:

<Style x:Key="{x:Type Label}"
   TargetType="{x:Type Label}">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Label}">
            <Border Background="{TemplateBinding Background}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    Padding="{TemplateBinding Padding}"
                    SnapsToDevicePixels="true">
                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                  RecognizesAccessKey="False"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsEnabled"
                         Value="false">
                    <Setter Property="Foreground"
                            Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
vs3odd8k

vs3odd8k5#

我绑定到了一个不想更改的数据源,所以我使用了一个自定义转换器来创建缺少的下划线:

[ValueConversion(typeof(string), typeof(string))]
public class ShowUnderscoreConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
        value is string text ? text.Replace("_", "__") : null;

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => 
        value is string text ? text.Replace("__", "_") : null;
}
avkwfej4

avkwfej46#

谢谢,这真的很好!我只是补充:代码之前的<Window.Resources>和代码之后的</Style></Window.Resources>

相关问题