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

时间:2011-10-22 18:26:15

标签: wpf xaml

一个非常简单的问题:

为什么我无法在WPF内容中看到_(下划线)?

例如

的内容
<Label Content="test_t" Name="label2"  />

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

5 个答案:

答案 0 :(得分:32)

标签支持助记符(即您可以使用 ctrl + (键)为它们提供焦点)。您可以使用下划线定义助记键。

http://www.charlespetzold.com/blog/2006/01/061004.html

如果要查看下划线,请用双下划线替换单个下划线。

答案 1 :(得分:8)

这是因为Label支持根据其内容定义助记符,这是通过在助记符前加下划线来完成的(与使用&的Windows窗体中发生的情况相同)。

如果要显示文字,请使用双下划线:

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

答案 2 :(得分:3)

我知道我迟到了,但我相信,如果你没有与TextBox相关联的Label,那么你应该使用TextBlock。

将控件更改为TextBlock可以解决此问题,因为只有Label具有助记符支持

答案 3 :(得分:1)

此样式解决了您的问题:

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

答案 4 :(得分:0)

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

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