मेरे पास कैनवास के अंदर लोड किया गया उपयोगकर्ता नियंत्रण है; डिफ़ॉल्ट रूप से इस उपयोगकर्ता नियंत्रण में दृश्यता ध्वस्त हो गई है। जब मेरी विंडो का एक विशिष्ट टेक्स्टबॉक्स केंद्रित होता है तो उपयोगकर्ता नियंत्रण दिखाई देता है।

जब उपयोगकर्ता नियंत्रण दिखाई देता है तो मैं उपयोगकर्ता नियंत्रण के अंदर किसी अन्य टेक्स्टबॉक्स पर फ़ोकस सेट करना चाहता हूं।

मैं ऐसा करने की कोशिश करता हूं:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
        if (this.Visibility == Visibility.Visible)
        {                
            FocusManager.SetFocusedElement(this, TextBlockInput);
        }
}

यह काम लगता है लेकिन एक समस्या है: टेक्स्टबॉक्स केंद्रित लगता है लेकिन टेक्स्टबॉक्स में कर्सर ब्लिंक नहीं करता है और मैं इनपुट के लिए वर्ण टाइप नहीं कर सकता।

मैं चाहता हूं कि फोकस के बाद टेक्स्टबॉक्स इनपुट के लिए तैयार हो। मै कैसे करूँ?

19
Luca Petrini 24 जून 2010, 14:24

3 जवाब

सबसे बढ़िया उत्तर

खैर, मैं इस तरह हल करता हूं:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        this.Dispatcher.BeginInvoke((Action)delegate
        {
            Keyboard.Focus(TextBlockInput);
        }, DispatcherPriority.Render);
    }
}

मुझे लगता है कि समस्या IsVisibleChanged ईवेंट "स्कोप" में फोकस कॉल थी ... है ना?

38
Luca Petrini 25 अगस्त 2010, 14:30
आज सुबह से ही इस समस्या को हल करने की कोशिश कर रहा था.... आपने मेरी शाम को बचा लिया :-) बहुत बहुत धन्यवाद !!
 – 
Cris
4 अगस्त 2011, 19:31
बहुत बढ़िया - मुझे कुछ काम भी बचाया।
 – 
Tim Holt
22 अप्रैल 2021, 23:28

प्रयत्न

Keyboard.Focus(TextBlockInput);

अधिक विवरण के लिए यहां देखें

1
Arsen Mkrtchyan 24 जून 2010, 14:29
मैंने कोशिश की लेकिन बदतर ... कीबोर्ड के साथ। फोकस (myTextBox) या myTextBox.Focus() ऐसा लगता है कि टेक्स्टबॉक्स केंद्रित नहीं है ... कर्सर न देखें।
 – 
Luca Petrini
24 जून 2010, 17:04
क्या यह एक मानक टेक्स्टबॉक्स है? या कोई तीसरा भाग नियंत्रण?
 – 
Arsen Mkrtchyan
25 जून 2010, 09:05
मैंने अपना समाधान पोस्ट कर दिया है...मदद के लिए धन्यवाद, ऐसा लगता है कि समस्या IsVisibleChange ईवेंट में फ़ोकस कॉल थी
 – 
Luca Petrini
25 जून 2010, 14:10

एक अन्य संभावित समाधान Visibility संपत्ति उपयोग Opacity के बजाय है। इस मामले में Focus() को कॉल करना वास्तव में फोकस सेट करता है।

-1
Pavels Ahmadulins 19 मई 2015, 16:36
1
यह एक बुरी सलाह है: Visilibity.Collapsed, Opacity=0 से बहुत अलग है। लॉजिकल/कीबोर्ड फोकस, माउस इवेंट फायरिंग, थीमिंग, सब कुछ अलग है। Opacityसौंदर्यशास्त्र के बारे में है, Visibility दृश्य वृक्ष के बारे में है।
 – 
Askolein
9 मार्च 2019, 19:41
जैसा कि मेरे उत्तर में कहा गया है, यह एक समाधान है, उचित समाधान नहीं है।
 – 
Pavels Ahmadulins
10 मार्च 2019, 15:48