2010-07-08 8 views
6

डब्ल्यूपीएफ में मैं निर्दिष्ट कर सकता हूं कि एक नियंत्रण कंटेनर एक फोकस स्कोप है और उस टैब नेविगेशन को नियंत्रण के माध्यम से चक्र होना चाहिए (यानी जब मैं अंतिम नियंत्रण से बाहर निकलता हूं, तो फोकस पहले पर वापस आ जाएगा):फोकस स्कोप के अंत तक पहुंचने वाले डब्ल्यूपीएफ फोकस का पता लगाएं

<Border FocusManager.IsFocusScope="True" KeyboardNavigation.TabNavigation="Cycle"> 
<ItemsControl ItemsSource="{Binding}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBox x:Name="Editor" Text="{Binding}" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Border> 

मुझे क्या करना कोशिश कर रहा हूँ पता लगाने के लिए जब फोकस अंतिम क्षेत्र छोड़ देता है। फोकस स्कोप के भीतर नियंत्रण की संख्या को जानने के बिना, क्या किसी को पता है कि यह संभव है?

+1

अंत में मैं वर्तमान आइटम का रिकॉर्ड रखने के लिए डिफ़ॉल्ट संग्रह दृश्य का उपयोग करके अपनी विशिष्ट समस्या के आसपास काम करने में सक्षम था, और कुछ संलग्न गुणों को वर्तमान कीबोर्ड फोकस के साथ रखने के लिए। –

उत्तर

-1

इस प्रश्न को बंद करने के लिए, मैं अपनी टिप्पणी को एक उत्तर में बदल रहा हूं। समाधान अनिवार्य रूप से दृश्य मॉडल के भीतर चयनित आइटम का रिकॉर्ड रखने के लिए था और उसमें परिवर्तनों पर प्रतिक्रिया करता था। एक सामान्य नियम के रूप में मुझे नहीं लगता कि दृश्य मॉडल को नियंत्रण फोकस के बारे में पता होना चाहिए, लेकिन इस मामले में मुझे लगता है कि यह आवश्यक है क्योंकि दृश्य मॉडल को फोकस परिवर्तनों पर प्रतिक्रिया करने की आवश्यकता है।

अंत मैं वर्तमान कुंजीपटल ध्यान देने के साथ लाइन में इस रखने के लिए डिफ़ॉल्ट संग्रह दृश्य का उपयोग वर्तमान आइटम का रिकॉर्ड रखने के लिए अपने विशिष्ट समस्या है, और कुछ संलग्न गुण के आसपास काम करने में सक्षम था

0

यह कार्यक्षमता WPF में नहीं दिखाई देती है, जैसा कि आपने पाया है।

मेरी सिफारिश यह संभालने के लिए एक संलग्न व्यवहार का निर्माण करना होगा।

यदि आपके पास मिश्रण है और सिस्टम का उपयोग कर सकते हैं। Windows.Interactivity, बस व्यवहार वर्ग से प्राप्त होता है और ऑनएटेड और ऑनडेटेड ओवरराइड करता है। अन्यथा, here प्रदर्शित के रूप में एक स्थिर व्यवहार वर्ग लिखें।

जब व्यवहार संलग्न होता है, तो पहले (वर्तमान?) केंद्रित आइटम को सहेजें और फोकस किए गए ईवेंट की सदस्यता लें। ईवेंट हैंडलर में, फ़ोकस स्कोप के भीतर केंद्रित आइटम को ट्रैक करें (उस दायरे को व्यवहार लागू किया जाता है)। जब केंद्रित आइटम पहले आइटम पर वापस आ जाता है, तो एक रूटेड घटना को आग लगाना। कुछ विवरण हैं जिन्हें काम करना होगा।

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