मेरे पास कैनवास के अंदर लोड किया गया उपयोगकर्ता नियंत्रण है; डिफ़ॉल्ट रूप से इस उपयोगकर्ता नियंत्रण में दृश्यता ध्वस्त हो गई है। जब मेरी विंडो का एक विशिष्ट टेक्स्टबॉक्स केंद्रित होता है तो उपयोगकर्ता नियंत्रण दिखाई देता है।
जब उपयोगकर्ता नियंत्रण दिखाई देता है तो मैं उपयोगकर्ता नियंत्रण के अंदर किसी अन्य टेक्स्टबॉक्स पर फ़ोकस सेट करना चाहता हूं।
मैं ऐसा करने की कोशिश करता हूं:
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
FocusManager.SetFocusedElement(this, TextBlockInput);
}
}
यह काम लगता है लेकिन एक समस्या है: टेक्स्टबॉक्स केंद्रित लगता है लेकिन टेक्स्टबॉक्स में कर्सर ब्लिंक नहीं करता है और मैं इनपुट के लिए वर्ण टाइप नहीं कर सकता।
मैं चाहता हूं कि फोकस के बाद टेक्स्टबॉक्स इनपुट के लिए तैयार हो। मै कैसे करूँ?
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 ईवेंट "स्कोप" में फोकस कॉल थी ... है ना?
प्रयत्न
Keyboard.Focus(TextBlockInput);
अधिक विवरण के लिए यहां देखें
एक अन्य संभावित समाधान Visibility
संपत्ति उपयोग Opacity
के बजाय है। इस मामले में Focus()
को कॉल करना वास्तव में फोकस सेट करता है।
Visilibity.Collapsed
, Opacity=0
से बहुत अलग है। लॉजिकल/कीबोर्ड फोकस, माउस इवेंट फायरिंग, थीमिंग, सब कुछ अलग है। Opacity
सौंदर्यशास्त्र के बारे में है, Visibility
दृश्य वृक्ष के बारे में है।