programing

WPF 라벨액셀러레이터 키 비활성화(텍스트 밑줄 누락)

muds 2023. 4. 21. 21:31
반응형

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

반응형