صفحة Silverlight لا اصطياد أحداث الإدخال
-
11-09-2019 - |
سؤال
لقد كنت أحاول التعامل مع حدث Keydown ل UserControl (صفحة) في تطبيق Silverlight، ولكن يبدو أن هناك بعض السلوك الغريب من جانب وظيفة إدخال المستخدم Silverlight. لا يتم الحصول على الحدث تحت أي ظرف من الظروف. لقد حاولت إرفاق معالج الأحداث إلى كل عنصر تحكم حاوية داخل UserControl، ولكن لا يزال بدون حظ. في الواقع، فإن نظام Silverlight Direction "Event Routing" هو رواية تماما ويبدو أمرا غريبا إلى حد ما، لذلك ربما يكون مجرد سوء فهم من جانبي، على الرغم من أنني قد جاهل أكثر من كيفية المتابعة.
التعليمة البرمجية التالية عبارة عن قالب من الصفحة المعينة التي أختبرها.
<UserControl x:Class="MyNamespace.CreditsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
KeyDown="UserControl_KeyDown">
<Grid x:Name="LayoutRoot">
<Border>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical">
<TextBlock TextAlignment="Center">
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
</TextBlock>
</StackPanel>
</Border>
</Grid>
</UserControl>
في WPF، سيكون الحل الواضح لمثل هذه المشكلة هو التعامل مع حدث PreviewKeydown، ولكن لسوء الحظ، هذا غير متوفر في Silverlight 2. وسوف تكون هناك أي أفكار موضع ترحيب (وشرح قصير للسبب في تدوين فضيح الحدث يتصرف كما هو).
المحلول
يمكنك إدارة مدخلات المستخدم من Uielement الرئيسية: Application.Current.rootviau
Application.Current.RootVisual.KeyDown += Application_KeyDown
ثم يمكنك التعامل مع طريقة Application_KeyDown جميع مدخلات المستخدم من لوحة المفاتيح.
يمكنك أيضا إلقاء نظرة على هذه المشكلة: التعامل مع حدث Keydown في قماش
نصائح أخرى
حاولت XAML التي قدمتها ولم تواجه مشكلة في تسليم حدث Keydown.
هناك شيء واحد يمكن أن يسببه: سوف يرى البرنامج المساعد Silverlight فقط أحداث الإدخال إذا كان يركز. لذا حاول وانقر على محتوى Silverlight في المتصفح لإعطاء تركيز الإدخال قبل الضغط على المفاتيح.
اسمحوا لي أن أعرف إذا كان هذا يحل مشكلتك أم لا.