تعطيل مفتاح تسريع تسمية WPF (الشرطة السفلية للنص مفقودة)

StackOverflow https://stackoverflow.com/questions/40733

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أقوم بإعداد .Content قيمة التسمية إلى سلسلة تحتوي على الشرطة السفلية؛يتم تفسير الشرطة السفلية الأولى كمفتاح تسريع.

بدون تغيير السلسلة الأساسية (عن طريق استبدال all _ مع __)، هل هناك طريقة لتعطيل مسرع التسميات؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم TextBlock كمحتوى للتسمية، فلن يمتص النص الخاص به الشرطات السفلية.

نصائح أخرى

يمكنك تجاوز خاصية RecognizesAccessKey الخاصة بـ ContentPresenter الموجودة في القالب الافتراضي للتسمية.على سبيل المثال:

<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> لطباعة النص الدقيق، الذي يحتوي على الشرطة السفلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top