반응형
WPF 레이블 가속기 키 비활성화 (텍스트 밑줄이 없음)
내가 설정하고 .Content
밑줄을 포함하는 문자열로 라벨의 값을; 첫 번째 밑줄은 바로 가기 키로 해석됩니다.
기본 문자열을 변경하지 않고 (모두 _
를 로 대체 하여 __
) 레이블에 대한 가속기를 비활성화하는 방법이 있습니까?
TextBlock을 레이블의 콘텐츠로 사용하는 경우 해당 텍스트는 밑줄을 흡수하지 않습니다.
레이블의 기본 템플릿에있는 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>
왜 이러지?
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;
}
}
}
를 사용 <TextBlock> ... </TextBlock>
하는 대신 <Label> ... </Label>
밑줄 데 정확한 텍스트를 인쇄 할 수 있습니다.
반응형
'IT TIP' 카테고리의 다른 글
열려있는 모든 문서 탭을 표시합니다. (0) | 2020.12.15 |
---|---|
VSCode의 열에서 자동으로 줄 바꿈 (0) | 2020.12.15 |
삽입 된 순서대로 사전에서 항목을 검색하는 방법은 무엇입니까? (0) | 2020.12.15 |
MySQL : FROM 절 제한에서 하위 쿼리로보기 (0) | 2020.12.15 |
@@ IDENTITY, SCOPE_IDENTITY (), OUTPUT 및 기타 마지막 ID 검색 방법 (0) | 2020.12.15 |