programing

레이블에 "_" 문자가 표시되지 않음

powerit 2023. 4. 28. 21:43
반응형

레이블에 "_" 문자가 표시되지 않음

나의Label.ContentWPF에서 "_" 문자가 처음 나타나는 것을 표시하지 않습니다. 왜죠?

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

여기에 이미지 설명 입력

프로젝트에 추가 코드가 없습니다.

_는 WPF에서 액세스 키, 즉 포커스를 제공하거나 UI 요소를 호출하기 위해 누를 수 있는 키를 신호하는 데 사용됩니다.이것은 방법과 비슷합니다.&는 Windows API 및 Windows Forms에서 사용됩니다.레이블은 다른 컨트롤(예: 텍스트 상자를 설명하는 데)의 레이블로 사용되기 때문에 이는 거의 예상되는 것입니다.다음을 확인해야 합니다.a를 누를 때 밑줄이 그어진 예에서.

설명서에서 다음을 참조하십시오.

액세스 키를 설정하려면 액세스 키여야 하는 문자 앞에 밑줄을 추가합니다.내용에 여러 개의 밑줄 문자가 있는 경우 첫 번째 문자만 액세스 키로 변환되고 다른 밑줄은 일반 텍스트로 나타납니다.액세스 키로 변환할 밑줄이 첫 번째 밑줄이 아닌 경우 변환할 밑줄 앞에 있는 밑줄에 두 개의 연속된 밑줄을 사용합니다.예를 들어 다음 코드에는 액세스 키가 포함되어 있으며 _HelloWorld로 표시됩니다.

<Label>__Hello_World</Label> 

H 앞에 있는 밑줄은 이중이므로 W 키는 액세스 키로 등록됩니다.

만약 당신이 그 기능을 필요로 하지도, 원하지도 않는다면.Label제공, 당신은 사용할 수 있습니다.TextBlock.

조이 말이 맞아요!사용하다

<TextBlock>L_abel</TextBlock>

모든 밑줄이 표시됩니다!

이 문제를 해결하는 가장 쉬운 방법은 다음과 같습니다.

바꾸다

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

WPF에는 RecognizesAccessKey라는 특성이 있습니다. 이 특성을 false로 변경해 보십시오.RadioButton을 사용하는 경우 레이블도 뒤에 있고 RadioButton 템플릿에서 액세스 키 인식을 사용하지 않도록 설정해야 합니다.RecognizesAccessKey="False"견본으로ContentPresenter그러면 이것이 비활성화되거나 레이블이 지금 기억나지 않는 다른 것으로 대체됩니다.

_ 문자가 바로 가기에 사용되기 때문입니다(바로 가기).

레이블 컨트롤에 바인딩된 텍스트가 '_' 문자를 표시해야 하는 곳이 몇 군데 있습니다.그래서 나는 변환기를 썼습니다.

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>

이 문제를 해결하기 위해 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;

설명서를 읽고 여기서 몇 가지 해결책을 시도하면서 저는 @BrightShadow에서 빌려 이 해결책을 생각해냈습니다.제가 마음에 들었던 것은 제가 원하는 레이블에 대해서만 단축키/액세서리를 껐다는 것입니다.스크립트 및 SQL 쿼리의 속성을 표시하는 프로젝트에서 발췌한 것입니다.

<Label x:Name="lblParmName" Grid.Column="0" Grid.Row="0" FontWeight="Bold" 
               HorizontalAlignment="Right" Margin="0,0,2,0" Content="@End_Date">
       <Label.Template>
             <ControlTemplate TargetType="Label">
                  <ContentPresenter RecognizesAccessKey="False" 
                                    HorizontalAlignment="Right" 
                                    VerticalAlignment="Center"/>
              </ControlTemplate>
       </Label.Template>
</Label>

더 멀리 가서 정렬 속성을 부모에 바인딩할 수 있었지만 레이블 컨트롤의 속성을 유지하면서 "언더스코어"로 텍스트를 표시할 수 있는 쉬운 방법을 보여주고 싶었습니다.이것이 누군가에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/9684619/label-doesnt-display-character

반응형