2011-07-15 14 views
6

मैं एक ईवेंट हैंडलर चाहता हूं जो ग्रिड स्प्लिटर को स्थानांतरित होने पर ईवेंट को संभालता है, मुझे यकीन नहीं है कि कोई है, अगर नहीं, तो मुझे लगता है कि पंक्तियों का आकार बदलते समय मैं एक घटना उत्पन्न कर सकता हूं?डब्ल्यूपीएफ में ग्रिड स्प्लिटर द्वारा उत्पन्न कार्यक्रमों को कैसे संभालें?

धन्यवाद।

उत्तर

11

आप पंक्तियों को बदलने वाले आकारों को कर सकते हैं, लेकिन ग्रिडस्प्लिटर स्वयं एक थंब है और इसकी अपनी घटनाएं जैसे ड्रैगस्टार्ट और ड्रैग कॉम्प्लेटेड हैं। अधिक जानकारी here

संपादित करें: यदि आप ग्रिडस्प्लिटर को ध्यान केंद्रित करते हैं और इसे कीबोर्ड के साथ स्थानांतरित करने की अनुमति देते हैं, तो अधिक जानकारी के लिए बेनलिट्ज़ द्वारा उत्तर पढ़ें।

+0

यदि आप कीबोर्ड के बारे में चिंता न करें, तो भी इसे पढ़ें, क्योंकि यह गलत घटना को संभालने के लिए एक सामान्य डिज़ाइन त्रुटि है (कार्रवाई के सामान्य परिणाम की बजाय इनपुट कार्रवाई में से एक) – Benlitz

+0

फिर विस्तृत करें :) I मैं उत्सुक हूं कि आप एक प्रकार की उपयोगकर्ता कार्रवाई के आधार पर एक गैर-विस्तारणीय विधि का पक्ष क्यों लेंगे, पर्याप्त संपत्ति परिवर्तन को संभालने पर, जबकि दोनों के पास कार्यान्वयन की एक ही लागत है। मान लीजिए कि इसे लागू करने के बाद, आपको एक बटन जोड़ने के लिए कहा जाता है जो डिफ़ॉल्ट पंक्ति आकार को पुनर्स्थापित करता है। प्रोग्राम को आकार में बदलना नहीं होगा। यही कारण है कि मेरा मानना ​​है कि यह दृष्टिकोण अच्छा नहीं है; यह आसानी से आपके यूआई में दुष्कर्मों को पेश कर सकता है। यदि आप पंक्ति आकार परिवर्तन के हैंडलर में जो ऑपरेशन करते हैं, वह स्पष्ट रूप से दिखाई नहीं देता है, तो हो सकता है कि आप सप्ताहों के लिए समस्या भी न देखें। – Benlitz

+0

उदाहरण के तौर पर, एक आकार के बजाय अंगूठे ड्रैगडेल्टा पर प्रतिक्रिया करना बहुत अलग एनीमेशन प्रभाव होता है - स्नूप के साथ जांचें और भिन्न संदेश देखें और वे कितने बारीक हैं। अंत में, जब तक कि कीबोर्ड को ग्रिडस्प्लिटर (फोकस करने योग्य = झूठा) का आकार बदलने के लिए उपयोग नहीं किया जा सकता है, वैसे भी यह एक महत्वपूर्ण बिंदु है। –

6

मैंने परीक्षण नहीं किया, लेकिन मुझे पूरा यकीन है कि यदि आप कुंजीपटल तीर (ग्रिड स्प्लिटर पर ध्यान देकर) पंक्तियों/स्तंभों का उपयोग कर रहे हैं तो वर्तमान में स्वीकार्य उत्तर AresAvatar से काम नहीं करेगा। यह एक दुर्लभ लेकिन संभावित मामला है जिसे आपको अपने आवेदन में अनुमान लगाना चाहिए।

जब ग्रिड स्प्लिटर ले जाया जाता है (या तो ड्रैग एंड ड्रॉप या कीबोर्ड तीरों का उपयोग करके), यह ग्रिड के ColumnDefinition/RowDefinition की Width/Height निर्भरता गुण बदल जाता है।

var heightDescriptor = DependencyPropertyDescriptor.FromProperty(RowDefinition.HeightProperty, typeof(ItemsControl)); 
heightDescriptor.AddValueChanged(myGrid.RowDefinition[0], HeightChanged); 

(ग्रिड की पहली पंक्ति में उदाहरण ट्रैक आकार बदलाव के लिए यह स्निपेट इच्छा): आप आसानी से इस संपत्ति परिवर्तन पर कोई हैंडलर रजिस्टर कर सकते हैं।

फिर आप एक हैंडलर में आकार बदल सकते हैं जो हर मामले में काम करेगा।

private void HeightChanged(object sender, EventArgs e) 
{ 
    // TODO: handle row resize 
} 

आम तौर पर, यह वास्तव में, उपयोगकर्ता इनपुट कार्रवाई (माउस खींचने, कीबोर्ड आदानों ...) एक तार्किक या दृश्य कार्यों/घटनाओं को संभालने के लिए पर भरोसा करने की सलाह नहीं दी जाती क्योंकि वहाँ लगभग हमेशा कई करने के लिए तरीके हैं विभिन्न इनपुट (माउस, कीबोर्ड, टचस्क्रीन, आसानी से उपयोग उपकरण ...) का उपयोग कर एक ही क्रियाएं।

+0

हाय @ बेनलिट्ज, यह उत्तर बहुत समझ में नहीं आता है। यदि आप ग्रिडस्प्लिटर को कीबोर्ड फोकस प्राप्त करने की अनुमति देते हैं, तो यह काम करता है जैसा कि यह माना जाता है। –

+0

यह सही समझ में आता है। यदि आप "ग्रिड स्प्लिटर ले जाया गया है" (ओपी प्रश्न) को संभालना चाहते हैं, तो आपको ड्रैगस्टार्ट/पूर्ण को संभालना नहीं चाहिए, क्योंकि यह मान लेगा कि माउस खींचना स्प्लिटर को स्थानांतरित करने का एकमात्र तरीका है, जो गलत है। दृष्टिकोण स्वयं गलत है, क्योंकि आप परिणाम को संभालने के बजाय संभावित कारण (खींचने) को संभालते हैं (स्प्लिटर स्थानांतरित हो गया है)। मेरे बिंदु को साबित करने के लिए मैंने जो चित्र दिया है वह यह है कि कुंजीपटल तीरों का उपयोग करके स्प्लिटर को स्थानांतरित करने से ड्रैग ईवेंट नहीं आ जाएंगे (मैंने अभी इसका परीक्षण किया है)। – Benlitz

+0

ठीक है, मैं आपकी टिप्पणी के साथ अब आपका उत्तर बेहतर समझता हूं। यदि आप GridSplitter को फोकस करने योग्य बनाते हैं, और कीबोर्ड आंदोलन की अनुमति देते हैं, तो यह ड्रैग ईवेंट उत्पन्न नहीं करता है। मैंने आपके पढ़ने के जवाब में एक नोट जोड़ा है। –

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