Метка не отображает символ "_" - PullRequest
27 голосов
/ 13 марта 2012

My Label.Content в WPF не отображает первое вхождение символа "_". Зачем?

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

enter image description here

Когда установлено Label.Content ="L__abel":

enter image description here

В проекте нет дополнительного кода.

Ответы [ 6 ]

45 голосов
/ 13 марта 2012

_ используется в WPF для обозначения ключа доступа, т. Е. Клавиши, которую вы можете нажать с помощью Alt , чтобы выделить или вызвать элемент пользовательского интерфейса.Это похоже на то, как & используется в Windows API и Windows Forms.Поскольку метки предназначены для использования в качестве метки для другого элемента управления (например, для описания текстового поля), это вполне ожидаемо.Вы должны увидеть a в своем примере, подчеркнутое при нажатии Alt .

Из документации :

Чтобы установитьключ доступа, добавьте подчеркивание перед символом, который должен быть ключом доступа.Если ваш контент содержит несколько символов подчеркивания, только первый из них преобразуется в ключ доступа;другие подчеркивания отображаются как обычный текст.Если подчеркивание, которое вы хотите преобразовать в ключ доступа, не является первым подчеркиванием, используйте два последовательных подчеркивания для любых подчеркиваний, предшествующих тому, которое вы хотите преобразовать.Например, следующий код содержит ключ доступа и отображается как _HelloWorld:

<Label>__Hello_World</Label> 

Поскольку знак подчеркивания, предшествующий H, является двойным, ключ W регистрируется как ключ доступа.

Полагаю, если вам не нужны и не требуются функции, предоставляемые Label, вы можете использовать TextBlock.

9 голосов
/ 17 апреля 2012

Джои прав!Используйте

<TextBlock>L_abel</TextBlock>

, и все ваши подчеркивания будут отображаться!

4 голосов
/ 24 января 2017

В WPF есть атрибут с именем RecognizesAccessKey , попробуйте изменить его на false.Если вы используете RadioButton, помните, что за ним также стоит метка, и в шаблоне RadioButton для отключения распознавания ключа доступа необходимо установить RecognizesAccessKey="False" для шаблона ContentPresenter.Затем это отключается или метка заменяется чем-то другим, что я сейчас не помню.

4 голосов
/ 13 марта 2012

Поскольку буква _ используется для ярлыков (это ускоритель)

3 голосов
/ 04 декабря 2017

Самый простой способ это исправить:

Изменить

<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>
0 голосов
/ 26 июня 2019

Использование 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...