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