WPF

2009-09-04 36 views
8

में ShowDialog() के बाद केवल DialogResult सेट करना मेरे पास एक विंडो है जिसे मैं कभी-कभी Show() का उपयोग करके खोलता हूं और कभी-कभी ShowDialog() का उपयोग करता हूं। दूसरे मामले में, लौटा संवाद परिणाम मेरे लिए महत्वपूर्ण है। लेकिन अगर मैं Show() पर कॉल करने के बाद DialogResult सेट करता हूं तो मुझे InvalidOperationException मिलता है। क्या यह पता लगाने का कोई तरीका है कि विंडो को खोलने के लिए किस विधि का उपयोग किया गया था और तदनुसार DialogResult सेट किया गया था या नहीं? क्या कोई और तरीका है?WPF

बेशक मुझे पता है कि मैं अपवाद को पकड़ और अनदेखा कर सकता हूं, लेकिन मुझे यह समाधान पसंद नहीं है।

उत्तर

9

विंडो के अंदर System.Windows.Interop.ComponentDispatcher.IsThreadModal का उपयोग यह निर्धारित करने के लिए करें कि यह एक मॉडल धागे पर चलता है या नहीं।

+0

धन्यवाद, यह वही है जो मैं चाहता था। – svick

+0

हमेशा काम नहीं करता है, हमारे मामले में हमें DialogResult = x को लपेटना पड़ा; उचित व्यवहार के लिए प्रयास/पकड़ में कॉल करें। – Doug

0

बस इसे सेट करने के बारे में कैसे। DialogResult = DialogResult.blah फॉर्म बंद करने की घटना में?

+1

इससे कैसे मदद मिलेगी? यह अभी भी शो() के बाद भी सेट करेगा और अपवाद का कारण बन जाएगा। बीटीडब्ल्यू मैं डब्ल्यूपीएफ का उपयोग करता हूं (मैंने इसे स्पष्ट रूप से निर्दिष्ट नहीं किया है) तो DialogResult बूल है? – svick

+0

इससे पहले कि मैं ऐसा करता हूं। बंद करें(); मॉडल विंडो में मैंने इसे सेट किया। DialogResult = DialogResult.OK; और मुख्य रूप में यह वही है जो मुझे मिलता है। धन्यवाद sgrassie :) – balexandre

3

यदि आप प्रतिबिंबक में set_DialogResult देखते हैं, तो यह निर्धारित करने के लिए _showingAsDialog जांचता है कि संवाद मोडल है या नहीं। दुर्भाग्य से यह एक निजी क्षेत्र है।

क्या आप हमेशा शो()/ShowDialog() को कॉल करने से पहले विंडो का एक नया उदाहरण बनाते हैं। यदि ऐसा है, तो आप निर्माता को यह तर्क दे सकते हैं कि यह कैसे दिखाया जाना है।

2

आप उपयोग की जांच के लिए Form.Modal संपत्ति का उपयोग कर सकते हैं।

Form.Show() का उपयोग करने के मामले में आपको कॉलर को फ़ॉर्म के किसी भी परिणाम के बारे में जानने के लिए एक और तरीका उपयोग करना होगा।

क्या फॉर्म दिखाने के दोनों तरीकों का उपयोग करने का कोई कारण है?

+2

वह संपत्ति WPF में मौजूद नहीं है – McAden

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