मैं एक स्क्रॉल व्यूअर की सामग्री के चारों ओर पैन करने का प्रयास कर रहा हूं, उसी तरह आप पीडीएफ दस्तावेज़ में घूमते हैं (ज़ूम इन/आउट करने के लिए स्क्रॉल करें, पैन पर खींचें + स्क्रॉल करें) स्क्रॉलव्यूयर इस कार्यक्षमता को टच इवेंट्स (पैनिंगमोड) के लिए बनाया गया है, हालांकि यह क्लिक + ड्रैग इवेंट्स में अनुवाद करने के लिए प्रतीत नहीं होता है। क्या इस कार्यक्षमता को मापने/अनुकरण करने का कोई तरीका है?माउस घटनाओं के साथ स्क्रॉलव्यूयर का पैनिंग मोड व्यवहार
उत्तर
Panning ScrollViewer द्वारा कार्यान्वित चार आभासी तरीके से आंतरिक रूप से सक्षम किया गया है:
OnManipulationCompleted OnManipulationDelta OnManipulationInertiaStarting और OnManipulationStarting
तो जहां इन आभासी तरीकों परिभाषित कर रहे हैं। आइए पदानुक्रम ऊपर जाओ। हम देखते हैं कि इसे OnManipulationCompletedThunk के भीतर UIElement पर कॉल किया गया है (मुझे यकीन है कि बाकी के लिए भी संयोगजनक तरीके हैं)।
सब कुछ इस बिंदु पर अभी भी निजी है, हम का दोहन करने के लिए कुछ करना चाहते हैं। दुर्भाग्य से इस बिंदु है जिस पर दोनों परावर्तक और ILSpy मुझे विफल रहा है (अच्छी तरह से वास्तव में यह नहीं, कॉल को किसी भिन्न dll (PresentationCore) है कि मैं BRB लोड नहीं है में है था) है। ठीक है वापस एक बार जब हम प्रेजेंटेशनकोर में देखते हैं, तो हमारे पास एक अस्पष्ट विचार है कि निर्भरता प्रॉपर्टीज स्थिर रूप से पंजीकृत हैं, इसलिए हम .cctor पाते हैं। यहां रुचि की कुछ पंक्तियां हैं।
ManipulationCompletedEvent = Manipulation.ManipulationCompletedEvent.AddOwner (typeof (UIElement));
और
EventManager.RegisterClassHandler (typeof (UIElement), ManipulationCompletedEvent, नई eventhandler (UIElement.OnManipulationCompletedThunk));
हम देखते हैं कि OnManipulationCompletedThunk इस वर्ग हैंडलर कि ManipulationCompletedEvent के लिए सुनता के लिए पंजीकृत कॉलबैक है। इसके अलावा, ManipulationCompletedEvent मूल रूप से UIElement पर परिभाषित नहीं किया गया है, इसे AddOwner के माध्यम से मैनिपुलेशन स्थिर वर्ग से उधार लिया जाता है।
हेरफेर वर्ग के लिए एक खोज करना, मुझे लगता है कि यह एक ही विधानसभा के भीतर System.Windows.Input नाम स्थान में है। क्या यह सार्वजनिक है, हाँ। ठंडा! तो इस बिंदु पर मुझे पता है कि अगर मैं मैनिपुलेशन कॉम्प्लेटेडएवेंट या उसके किसी भी दोस्त को आग लगाता हूं, तो अंततः यह स्क्रॉलव्यूअर में कॉल करेगा। http://msdn.microsoft.com/en-us/library/system.windows.input.manipulation.aspx
इस सार्वजनिक स्थैतिक वर्ग के लिए प्रलेखन में, मुझे लगता है कि दिलचस्प और संभवतः उपयोगी विधियों का एक गुच्छा है। केवल एक जो स्पष्ट रूप से स्पष्ट नहीं है AddManipulator है। यह बात क्या करती है? क्लिक .. पढ़ता है .. ओह, "प्रत्येक टच पॉइंट एक इमैनिपुलेटर ऑब्जेक्ट है। उदाहरण के लिए, यदि आप ऑब्जेक्ट का आकार बदलने के लिए दो अंगुलियों का उपयोग करते हैं, तो टचडिवाइस, जो इमैनिपुलेटर लागू करता है, प्रत्येक उंगली के लिए बनाया जाता है।" तो TouchDevice एक IManipulator है। हो सकता है कि मुझे अपना खुद का मैनिपुलेटर बनाने का तरीका बताएगा।
TouchDevice पर गुण सुविधाओं का समर्थन करता है के रूप में कुछ सुराग दे। यह एक माउसडिवाइस की तरह है (कैप्चर की अवधारणा है, डायरेक्टलीओवर इत्यादि), लेकिन यह उसी तरह हेरफेर का समर्थन नहीं करता है। इसके बजाय हम माउस घटनाओं के जवाब में मैनिपुलेशन करना चाहते हैं। चलो टचडिवाइस पर यह देखने के लिए कठिन लगते हैं कि यह वास्तव में इनमें से कुछ सुविधाओं को कैसे लागू करता है।
तरीकों TouchDevice लागू कर रहा है GetPosition कर रहे हैं और ManipultionEnded
GetPosition रिटर्न this.GetTouchPoint (relativeTo)।पद; relativeTo एक पैरामीटर
ManipulationEnded कॉल एक bool पैरामीटर रद्द नामित अग्रेषण OnManipulationEnded है। सुनिश्चित नहीं है कि अभी तक क्या रद्द है। ओह, यह पता चला है कि यह उपयोग नहीं किया जाता है, अजीब लेकिन ठीक है। यह मूल रूप से शून्य पर कब्जा सेट करता है। खरगोश छेद के अंत में Kindof तो हमें बैक अप और पुनर्मूल्यांकन करना होगा।
मैं वास्तव में करना चाहता हूं कि UIElement पर मैन्युअल रूप से ईवेंट उठाएं और देखें कि यह काम करता है या नहीं। UIElement पर RaiseEvent विधि इस के लिए काम करना चाहिए। ब्रब कोशिश करने जा रहा है। एरर प्रतीक्षा करें मुझे कुछ याद आया, मैनिपुलेशन क्लास पर परिभाषित सभी घटनाओं को आंतरिक के रूप में चिह्नित किया गया है।
स्पष्ट रूप से ये घटनाएं केवल आंतरिक खपत के लिए हैं, और प्रतिबिंब करने से कम हमारे पास एक एवेन्यू नहीं है।
मुझे लगता है कि मैनिपुलेशन सुविधा का उपयोग कर आप जो भी करने की कोशिश कर रहे हैं उसके लिए अधिक है। ड्रैग इवेंट और कैनवास के साथ इसे लागू करने का शायद एक तरीका है।
इसके अलावा, यह भी गुम हो गया और सोचा कि यह कुछ प्रासंगिकता हो सकता है http://multitouchvista.codeplex.com/
- 1. पैनिंग
- 2. Google मानचित्र सभी घटनाओं पर उपयोगकर्ता पैनिंग अक्षम करें
- 3. कैनवास माउस घटनाओं
- 4. स्क्रॉलव्यूयर
- 5. स्क्रॉलव्यूयर ग्रिड व्यू एक्सएएमएल
- 6. स्क्रॉलव्यूयर
- 7. जावा माउस दबाया गया - घटनाओं के बिना
- 8. स्क्रॉलव्यूयर के बच्चे के नियंत्रण पर माउस व्हील काम नहीं कर रहा है
- 9. छवि चुटकी-ज़ूम के लिए स्क्रॉलव्यूयर का उपयोग करके, पैन
- 10. डब्लूपीएफ स्क्रॉलव्यूयर स्क्रॉल राशि
- 11. इवेंट बबबेलिंग (स्क्रॉलव्यूयर)
- 12. कतारबद्ध माउस घटनाओं को अनदेखा करना
- 13. गूगल मैप्स: सीमा पैनिंग
- 14. प्रासंगिक कार्रवाई मोड कस्टम व्यवहार
- 15. स्क्रॉलव्यूयर फोकस
- 16. माउस की घटनाओं के ऊपर जब jQuery ui.sortable
- 17. एमवीवीएम पैटर्न के साथ नियंत्रण पर माउस घटनाओं को संभालना - सर्वोत्तम अभ्यास -
- 18. हस्तांतरण की माउस माता पिता नियंत्रण करने के लिए घटनाओं
- 19. स्क्रॉलव्यूअर के अंदर सूचीदृश्य स्क्रॉलव्यूयर स्क्रॉल को रोकता है
- 20. व्यवहार के साथ डेटाकंट्रैक्ट
- 21. स्विंग माउस टॉवर ट्रिगर नहीं करेगा माउस घुमावदार घटनाओं के बाद ठीक से माउस/ठीक से समायोजित?
- 22. विरासत के साथ स्थैतिक चर का व्यवहार
- 23. पैनिंग और ज़ूमिंग
- 24. सी # डब्ल्यूपीएफ - स्क्रॉलव्यूयर + टेक्स्टब्लॉक परेशानियां
- 25. कोड में पैनिंग और सामान्य स्क्रीन मोड के बीच अंतर - विंडोज
- 26. मैं जावास्क्रिप्ट समय कैसे उपयोग कर सकते हैं माउस स्टॉप पर और माउस की घटनाओं
- 27. उच्चतम जावास्क्रिप्ट घटनाओं का परीक्षण
- 28. पारदर्शी विंडो की माउस घटनाओं को कैसे रोकें?
- 29. सिल्वरलाइट वर्टिकल केवल स्क्रॉलव्यूयर?
- 30. बाउटरी मोड में कैउट व्यवहार कैसे करें?