2008-11-07 19 views
13

में एक बच्चे के नियंत्रण को छोड़कर सभी को अक्षम करना मेरे पास मेरी विंडो पर नियंत्रण का एक गुच्छा है। उनमें से एक ताज़ा बटन है जो पृष्ठभूमि धागे पर एक बोझिल कार्य करता है।एक WPF विंडो

जब उपयोगकर्ता रीफ्रेश बटन पर क्लिक करता है, तो मैंने कर्सर को प्रतीक्षा (घंटा ग्लास) स्थिति में डाल दिया और पूरी विंडो को अक्षम कर दिया - Me.IsEnabled = False

मैं उपयोगकर्ता को रद्द बटन पर क्लिक करके ताज़ा कार्रवाई रद्द करने का समर्थन करना चाहता हूं, लेकिन पूरी विंडो अक्षम होने पर मैं इसे सुविधाजनक नहीं कर सकता।

क्या प्रत्येक नियंत्रण को अक्षम करने के अलावा ऐसा करने का कोई तरीका है (रद्द बटन को छोड़कर) एक करके एक बार फिर उपयोगकर्ता को रद्द करने पर उन्हें एक-एक करके फिर से सक्षम करना?

+0

मैं दोनों Me.IsEnabled और Me.Cursor का उपयोग नहीं कर सकता। http://stackoverflow.com/questions/762396/wpf-wait-cursor-with-backgroundworker-thread –

उत्तर

19

आप एक पैनल (ग्रिड, StackPanel, आदि) में सभी नियंत्रण रखा, और एक अन्य पैनल में रद्द बटन छोड़ सकते हैं। फिर अन्य पैनल की IsEnabled संपत्ति सेट करें।

प्रैक्टिस में, यह शायद एक से अधिक अतिरिक्त पैनल पेश करेगा।

<StackPanel Orientation="Horizontal"> 
    <StackPanel x:Name="controlContainer" Orientation="Horizontal"> 
     <!-- Other Buttons Here --> 
    </StackPanel> 
    <Button Content="Cancel" /> 
</StackPanel> 

उसके बाद, आप सब कुछ निष्क्रिय करने के लिए निम्नलिखित लेकिन रद्द बटन करना होगा::

उदाहरण के लिए, यदि आप बटन के एक StackPanel था, तो आप एक अतिरिक्त StackPanel जोड़ सकते हैं

controlContainer.IsEnabled = false; 
+0

स्टैकपैनल में WP8 – radders

+0

में एक IsEnabled प्रॉपर्टी नहीं है, ठीक है, मैंने WP8 के साथ 0 काम किया है, लेकिन मुझे WP8 'StackPanel' के लिए दस्तावेज़ मिल गए हैं: http://msdn.microsoft.com/en-US/library/ विंडोज़/एप्स/windows.ui.xaml.controls.stackpanel.aspx मुझे लगता है कि आप उस एपीआई का उपयोग कर रहे हैं, न कि सिल्वरलाइट एक, क्योंकि सिल्वरलाइट में 'IsEnabled' संपत्ति है। जबकि आपको अक्षम नियंत्रणों का सटीक रूप नहीं मिलेगा, आप 'नियंत्रण नियंत्रक' पर इनपुट अक्षम करने के लिए हमेशा 'IsHitTestVisible = "false" 'सेट कर सकते हैं। अन्यथा, आपके पास अर्ध-पारदर्शी ओवरले हो सकता है जब आप अन्य नियंत्रण अक्षम करना चाहते हैं (और बाहरी पैनल के रूप में 'ग्रिड' का उपयोग करना चाहते हैं)। –

3

आप डेटा को अपने कस्टम बूलियन निर्भरता प्रॉपर्टी में प्रत्येक नियंत्रण सक्षम कर सकते हैं जो आपके एप्लिकेशन को लॉक होने पर संकेत देता है। बस रद्द बटन को बाध्य न करें।

जैसा कि डोनेले ने उल्लेख किया है कि आप कनवर्टर के साथ बहु बाध्यकारी सेट कर सकते हैं। यहां कुछ उदाहरण दिए गए हैं जिनका आप उल्लेख कर सकते हैं। WPF MultiBinding with Converter Implementing Parameterized MultiBinding Sample

+0

मेरे पास एकमात्र समस्या है/यह है कि मेरे कुछ नियंत्रणों पर IsEnabled गुण पहले से ही एक बूलियन संपत्ति से डेटा है अन्य उद्देश्यों के लिए। –

+1

आप एक कनवर्टर के साथ एक बहु-बाध्यकारी का उपयोग कर सकते हैं - एंड्रॉइड या व्यवहार के पैरामीटर के साथ सामान्य जेनेरिक करने के लिए उदाहरण हैं। – Donnelle

5

मैं यह भी चाहता था कि उपयोगकर्ता लोड होने से रद्द हो सके। मुझे एक प्यारा समाधान मिला।

foreach (Control ctrl in this.Controls) 
    ctrl.Enabled = false; 

CancelButton.Enabled = true; 

यह भी अनुमति देता है मुख्य विंडो का चयन किया और this.Enabled = false; जो पूरी तरह से अप विंडो ताले के विपरीत स्थानांतरित करने की।

+0

नियंत्रण में WP8 में एक IsEnabled संपत्ति नहीं है – radders

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