레이블에 "_" 문자가 표시되지 않음
나의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>
설정 시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
'programing' 카테고리의 다른 글
오류 발생 시 스크립트 종료 (0) | 2023.04.28 |
---|---|
MVC3에서 Azure Blob 파일 다운로드하기 (0) | 2023.04.28 |
워크시트_변경 하위 절차 중에 MS Excel이 충돌하고 닫히는 이유는 무엇입니까? (0) | 2023.04.28 |
도커가 있는 Ubuntu WSL을 찾을 수 없습니다. (0) | 2023.04.28 |
Azure 가상 시스템 간의 공유 드라이브 (0) | 2023.04.28 |