【问题标题】:Label doesn't display "_" character标签不显示“_”字符
【发布时间】:2012-03-13 13:12:20
【问题描述】:

我在 WPF 中的 Label.Content 不显示“_”字符的第一次出现。为什么?

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="148" Width="211">
    <Grid>
        <Label Content="L_abel" Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top" />
    </Grid>
</Window>

当设置Label.Content ="L__abel" 时:

项目中没有额外的代码。

【问题讨论】:

  • @H.B. - 没有帮助的评论。如果不能询问 MSDN 文档中的任何内容,那么关于堆栈溢出的问题就会很少。如果你没有答案,就不要发帖,就这么简单。
  • 我不同意。我没有阅读整个文档,因为它非常庞大且并非全部相关。我可以通过查看堆栈溢出找到我需要的相关信息。我很高兴这篇文章在这里,也很高兴得到答案。

标签: .net wpf label


【解决方案1】:

_ 在 WPF 中用于表示访问键,即您可以使用 Alt 按下的键来获得焦点或调用 UI 元素。这类似于在 Windows API 和 Windows 窗体中使用 &amp; 的方式。由于标签旨在用作另一个控件的标签(例如,用于描述文本框),因此这是意料之中的。当您按下 Alt 时,您应该会在示例中看到带有下划线的 a

来自documentation

要设置访问密钥,请在应为访问密钥的字符前添加下划线。如果您的内容有多个下划线字符,则仅将第一个字符转换为访问密钥;其他下划线显示为普通文本。如果要转换为访问密钥的下划线不是第一个下划线,请使用两个连续的下划线来表示要转换的下划线之前的任何下划线。例如,以下代码包含访问密钥并显示为 _HelloWorld:

<Label>__Hello_World</Label> 

因为 H 前面的下划线是双引号,所以 W 键注册为访问键。

我想如果您既不需要也不想要Label 提供的功能,您可以使用TextBlock

【讨论】:

  • 那么,如何动态显示包含“_”的内容?
  • 不要把它放在除了显示文本之外还有其他用途的控件中。或转义元字符。
  • 这令人难以置信。下划线真的是他们能想到的最不起眼的角色吗?并且用 TextBlocks 替换标签是很糟糕的,因为出于某些不可理解的原因,Textblocks 不会从 Control 继承,这意味着您需要为所有内容使用不同的样式和绑定。
【解决方案2】:

乔伊是对的!使用

<TextBlock>L_abel</TextBlock>

你所有的下划线都会显示出来!

【讨论】:

    【解决方案3】:

    最简单的修复方法是:

    改变

    <Label Content="L_abel" Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top" />
    

    <Label Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top">
    <TextBlock Text="L_abel"/>
    </Label>
    

    【讨论】:

    • 很棒的解决方案,就像一个魅力。由于需要 ContentStringFormat,我不能只切换到 Textblock,但这确实将其固定在一个整体上。许多荣誉!
    【解决方案4】:

    WPF中有一个属性叫RecognizesAccessKey,试着把它改成false。如果您使用 RadioButton 请注意后面还有标签,并且在 RadioButton 模板中禁用访问密钥识别您必须在模板 ContentPresenter 上设置 RecognizesAccessKey="False"。然后这是禁用的,或者标签被替换为我现在不记得的其他内容。

    【讨论】:

      【解决方案5】:

      因为_字母用于快捷键(是加速键)

      【讨论】:

        【解决方案6】:

        我有几个地方绑定到标签控件的文本必须显示“_”字符。于是我写了一个转换器:

        using System;
        using System.Globalization;
        using System.Windows;
        using System.Windows.Data;
        
        namespace Converters
        {
            public class TextToLabelConverter : DependencyObject, IValueConverter
            {
                /// <inheritdoc />
                public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    return (value is string strValue)
                        ? strValue.Replace("_", "__")
                        : Binding.DoNothing;
                }
        
                /// <inheritdoc />
                public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    throw new NotImplementedException();
                }
            }
        }
        
        

        因此在 XAML 中使用它:

        ...
            xmlns:converters="clr-namespace:Converters"
        ...
        
        <Window.Resources>
            <converters:TextToLabelConverter x:Key="TextToLabelConverter" />
        </Window.Resources>
        
        <Grid>
            <Label Content="{Binding SourceText, Converter={StaticResource TextToLabelConverter}}" />
        </Grid>
        
        

        【讨论】:

          【解决方案7】:

          使用 TextBlock 解决此问题有一些缺点,例如无法将内容垂直居中(除非将其放置在网格中,而且在许多情况下可能不需要必要的附加控件)。就我而言,我使用以下代码创建了一个行为类似于标签的 TextBox:

          var fauxLabel = new TextBox();
          fauxLabel.Cursor = Cursors.Arrow; // Avoid the IBeam mouse cursor when hovering
          fauxLabel.Background = Brushes.Transparent;
          fauxLabel.BorderThickness = new Thickness(0.0, 0.0, 0.0, 0.0);
          fauxLabel.Focusable = false;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-15
            • 2017-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多