2013-03-06 12 views
6

से नहीं बढ़ रही है यहां मेरे पास ग्रिड के साथ नमूना विंडो है। जब कुंजी दबाया जाता है तो मुझे घटना को कैप्चर करने की आवश्यकता होती है। लेकिन जब मैं ग्रिड क्षेत्र पर क्लिक करता हूं और फिर कुंजी दबाता हूं तो यह बढ़ता नहीं जा रहा है। यह केवल तभी काम करेगा जब टेक्स्टबॉक्स केंद्रित है। मुझे पता है कि अगर मैं इसे विंडो से कैप्चर करता हूं तो यह काम करेगा। लेकिन मेरे पास कुछ उपयोगकर्ता नियंत्रण के साथ अन्य एप्लिकेशन है और मुझे इसे अलग-अलग से कैप्चर करने की आवश्यकता है। मैंने खिड़की के लिए फोकसबल.फल्स सेट करने और ग्रिड के लिए सच सेट करने की कोशिश की लेकिन यह मदद नहीं करता है। कोई समाधान?कीडाउन घटना ग्रिड

<Window x:Class="Beta.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" Closed="Window_Closed_1" Focusable="False"> 

    <Grid KeyDown="Grid_KeyDown_1" Focusable="True"> 
    <TextBox x:Name="tbCount" HorizontalAlignment="Left" Height="35" Margin="310,49,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="83"/> 

    </Grid> 

उत्तर

3

राइट इस अजीब है। यह स्पष्ट रूप से एक फोकस समस्या है, फिर भी मैं समझ नहीं पा रहा हूं कि ग्रिड फोकस क्यों नहीं लेता है, भले ही हम उस पर क्लिक करें।

हालांकि एक समाधान है: ग्रिड की भरी हुई घटना के लिए एक हैंडलर बनाने के लिए:

<Grid x:Name="theGrid" KeyDown="Grid_KeyDown_1" Focusable="True" Loaded="TheGrid_OnLoaded"> 

और फिर पीछे अपने कोड में ध्यान केंद्रित मजबूर:

private void TheGrid_OnLoaded(object sender, RoutedEventArgs e) 
    { 
     theGrid.Focus(); 
    } 

आपका keydown घटना के बाद काम करेंगे उस। उम्मीद है कि यह मदद करता है।

+0

कि बेहतर है, लेकिन मेरी असली आवेदन में यह हालांकि हर usercontrol से keydown ईवेंट सक्रिय मैंने इसे केवल एक ही लगाया। मुझे जांच करनी है .. – Dork

+0

मेरे पास कई खिड़कियां हैं, उन्हें सभी ध्यान केंद्रित करने के लिए सही बात नहीं होगी – Dork

5

मुझे यूनिवर्सल विंडोज प्लेटफ़ॉर्म (यूडब्लूपी) ऐप के साथ एक ही समस्या थी। मैंने एक्सएएमएल में एक ग्रिड को घटना से जोड़ा लेकिन यह केवल तभी काम करेगा जब फोकस टेक्स्टबॉक्स पर था। मुझे एमएसडीएन पर जवाब (केवल एक कामकाज नहीं मिला): https://social.msdn.microsoft.com/Forums/en-US/56272bc6-6085-426a-8939-f48d71ab12ca/page-keydown-event-not-firing?forum=winappswithcsharp

संक्षेप में, उस पोस्ट के अनुसार, घटना आग नहीं होगी क्योंकि टेक्स्टबॉक्स पर ध्यान केंद्रित होने पर, यह उच्च हो गया है, इसलिए ग्रिड ' इसे प्राप्त नहीं करें। इसके बजाय Window.Current.CoreWindow.KeyDown का उपयोग किया जाना चाहिए। मैंने अपने इवेंट हैंडलर को पृष्ठ लोड किए गए ईवेंट में जोड़ा है:

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    Window.Current.CoreWindow.KeyDown += coreWindow_KeyDown; 
    Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp; 
} 

यह मेरे लिए अपेक्षित काम करता है।

+4

मुझे लगता है कि इस उत्तर ने जवाब का जवाब देने का सबसे अच्छा तरीका बताया है। यह हर स्थिति पर काम करता है। नोट: मैं 'ऑननेविगेटेड' पर ईवेंट हैंडलर जोड़ने का सुझाव देता हूं और ** ऑनरविगेटेड फ्रॉम –

2

मैं भी फोकस विधि का उपयोग कर, कोई फायदा नहीं हुआ, जब तक मैं (यह गलत पर डिफ़ॉल्ट था।) को सही पर फ़ोकस करने योग्य गुण सेट

+0

एह पर हैंडलर को हटाने के लिए ** भूलना न भूलें! यही वह था जो मैं याद कर रहा था। धन्यवाद – NielW

संबंधित मुद्दे