लघु कहानी: फ़ोकस स्कोप के अंदर एक सूची बॉक्स किसी आइटम को चुनने की अनुमति नहीं देता है।फ़ोकस स्कोप के भीतर ListBox का उपयोग करें
लंबी कहानी:
मैं डेटा प्रविष्टि के लिए एक संदर्भ के प्रति संवेदनशील विजेट बनाने की कोशिश कर रहा हूँ। मेरे पास कई क्षेत्रों के साथ मुख्य पैनल है। इसके नीचे, मेरे पास FocusManager.FocusScope="True"
वाला पैनल है। यह पैनल उस फ़ील्ड के लिए प्रासंगिक विजेट से भरा जाएगा जो वर्तमान में फ़ोकस कर रहा है। उदाहरण के लिए, दिनांक फ़ील्ड का चयन स्क्रीन के नीचे कैलेंडर दिखाएगा।
मेरे पास कई नियंत्रण हैं जिन्हें उपयोगकर्ता को सूची से कई मानों में से एक का चयन करने की आवश्यकता होती है। मैंने फोकसबॉक्स को फोकस स्कोप में रखा है, लेकिन मैं किसी भी आइटम का चयन नहीं कर सकता। जब कुछ चुना जाता है (प्रोग्रामेटिक रूप से) और आप ListBox पर क्लिक करते हैं, तो यह सब कुछ अचयनित करता है।
मैंने कुछ घटनाओं का परीक्षण किया, और यह माउसडाउन घटनाओं को नहीं उठा रहा है, लेकिन यह माउसमोव घटनाओं को उठा रहा है। जब भी मैं किसी आइटम पर क्लिक करता हूं तो यह गॉटफोकस को सक्रिय करता है, लेकिन यह कभी भी लॉस्टफोकस को नहीं चलाता है। मुझे यकीन नहीं है कि इसका क्या अर्थ है, लेकिन मुझे आशा है कि यह किसी को भी मददगार हो सकता है जो इसे पढ़ रहा है।
यहां कोड है जिसे मैं संदर्भ-संवेदनशील विजेट प्रदर्शित करने के लिए उपयोग कर रहा हूं।
<Grid x:Name="EntryWidget" FocusManager.IsFocusScope="True">
<Grid.Resources>
<ListBox x:Key="List" ItemsSource="{Binding}" />
</Grid.Resources>
</Grid>
मैं उपयोग Window.GotFocus घटना कराई, उचित नियंत्रण के लिए विजेट इस प्रकार अपडेट की तरह करने के लिए:
private void Window_GotFocus(object sender, RoutedEventArgs e)
{
FrameworkElement focus = (FrameworkElement)FocusManager.GetFocusedElement(this);
EntryWidget.Children.Clear(); // Could this be the culprit?
object tag = focus.Tag;
if (tag != null)
{
if (EntryWidget.Resources.Contains(tag))
{
EntryWidget.Children.Add(EntryWidget.Resources[tag] as UIElement);
}
}
}
तो:
-
मैं अपने विंडो में निम्नलिखित XAML है
क्या फ़ोकसबॉक्स को फ़ोकस स्कोप के भीतर काम करने का कोई तरीका है?
या कोई अन्य सूची नियंत्रण है जो फोकस स्कोप के अंदर बेहतर काम करता है?
या क्या मैं फोकस स्कॉप्स का उपयोग कर गलत दृष्टिकोण ले रहा हूं? मेरी आवश्यकताएं: उपयोगकर्ता स्क्रॉल करने योग्य सूची से किसी आइटम का चयन करने में सक्षम होना चाहिए, जो वर्तमान फ़ील्ड में मान दर्ज करेगा। वर्तमान क्षेत्र फोकस खोना नहीं चाहिए।
मुझे पूरा यकीन नहीं है कि आप क्या करने का प्रयास कर रहे हैं, लेकिन क्या आपने संग्रह दृश्यों को जोड़ने पर देखा है, यह तब होता है जब संग्रह का एक आइटम चुना जाता है, अन्य संग्रह स्वचालित रूप से अपडेट हो जाता है। यहां एमएसडीएन http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx – mihajlv
से एक लिंक है, मेरे पास केवल एक सूची बॉक्स है। जब कोई आइटम चुना जाता है, तो उसे उस टेक्स्टबॉक्स को अपडेट करना चाहिए जिसमें फोकस हो। लेकिन मैं किसी भी आइटम का चयन नहीं कर सकता। –
इसके बारे में, यदि आपके पास एक प्रकार का टेक्स्टबॉक्स है जो टेक्स्टबॉक्स द्वारा अपडेट किया जाता है तो इसे फोकस हो जाता है, डीपी को स्वयं के बराबर सेट करता है। फिर जब आप किसी सूची पर क्लिक करते हैं, तो आप उस डीपी को अपडेट करते हैं जिसमें अंतिम तत्व का टेक्स्टबॉक्स होता है जिसमें फोकस होता है, मुझे पता है कि यह एक कामकाज है लेकिन इसे काम करना चाहिए। – mihajlv