반응형
WPF 라벨액셀러레이터 키 비활성화(텍스트 밑줄 누락)
셋팅하고 있습니다..Content
밑줄이 포함된 문자열에 대한 레이블 값. 첫 번째 밑줄은 액셀러레이터 키로 해석됩니다.
기본 문자열을 변경하지 않고(모두 교체하여)_
와 함께__
), 라벨 액셀러레이터를 비활성화하는 방법이 있습니까?
레이블의 내용으로 텍스트 블록을 사용하는 경우 텍스트에 밑줄이 흡수되지 않습니다.
라벨의 기본 템플릿에 있는 ContentPresenter의 RecognizesAccessKey 속성을 덮어쓸 수 있습니다.예를 들어 다음과 같습니다.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.Resources>
<Style x:Key="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border>
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="False" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Label>_This is a test</Label>
</Grid>
</Page>
를 사용하다<TextBlock> ... </TextBlock>
대신<Label> ... </Label>
정확한 텍스트를 인쇄합니다(밑줄 있음).
왜 이렇게 안 돼?
public partial class LabelEx : Label
{
public bool PreventAccessKey { get; set; } = true;
public LabelEx()
{
InitializeComponent();
}
public new object Content
{
get
{
var content = base.Content;
if (content == null || !(content is string))
return content;
return PreventAccessKey ?
(content as string).Replace("__", "_") : content;
}
set
{
if (value == null || !(value is string))
{
base.Content = value;
return;
}
base.Content = PreventAccessKey ?
(value as string).Replace("_", "__") : value;
}
}
}
언급URL : https://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing
반응형
'programing' 카테고리의 다른 글
Swashbuckle을 사용하여 WebAPI의 Swagger 문서에서 메서드를 생략하는 방법 (0) | 2023.04.21 |
---|---|
PowerShell에서 콘솔 출력 억제 (0) | 2023.04.21 |
장고와 xlrd, 메모리에서 읽기 (0) | 2023.04.21 |
git에서 푸시하려는 내용을 보려면 어떻게 해야 합니까? (0) | 2023.04.21 |
파일 이름 문자열에서 파일 확장자 제거 (0) | 2023.04.21 |