2016-03-01 11 views
7

मैंने एक WPF एप्लिकेशन बनाया है। यह डेस्कटॉप पर पूरी तरह से ठीक काम करता है लेकिन जिस क्षण एप्लिकेशन टचस्क्रीन पर चला जाता है, वह क्रैश हो जाता है। मैंने टचस्क्रीन प्रक्रियाएं बंद कर दी हैं और एप्लिकेशन पूरी तरह से ठीक काम करता है। मुझे आश्चर्य है कि किसी को भी टचस्क्रीन प्रक्रियाओं को अक्षम करने के बजाय "बेहतर" फिक्स मिला है, क्योंकि यह माइक्रोसॉफ्ट सतह या विंडोज टैबलेट पर काम नहीं करेगा।टचस्क्रीन डिवाइस पर WPF ऑटोमेशन पीयर क्रैश

मैं वर्तमान में नेट 4.5

+0

क्या आप दिखा सकते हैं कि आपको कोड में कहां अपवाद मिल रहा है? – Terrance

उत्तर

3

मैं WPF AutomationPeer भी साथ कई समस्याओं पड़ा है उपयोग कर रहा हूँ।

आप अपने WPF UI तत्वों को कस्टम ऑटोमेशन पीयर का उपयोग करने के लिए मजबूर कर अपनी समस्या का समाधान करने में सक्षम हो सकते हैं जो कि बाल नियंत्रण के ऑटोमेशन पीयर को वापस नहीं लौटाकर डिफ़ॉल्ट रूप से अलग-अलग व्यवहार करता है। यह किसी भी यूआई स्वचालन सामान काम करना बंद कर सकता है, लेकिन उम्मीद है कि आपके मामले में, खान में के रूप में, आप यूआई स्वचालन उपयोग नहीं कर रहे ..

एक कस्टम स्वचालन सहकर्मी वर्ग कि FrameworkElementAutomationPeer से विरासत और GetChildrenCore विधि ओवरराइड करता है बनाएँ, एक वापस जाने के लिए बाल नियंत्रण स्वचालन सहकर्मियों की बजाय खाली सूची। जब ऑटोमेशन पीयर के पेड़ के माध्यम से पुनरावृत्ति करने का प्रयास होता है तो इससे समस्याएं उत्पन्न होनी चाहिए।

नियंत्रण प्रकार निर्दिष्ट करने के लिए GetAutomationControlTypeCore को ओवरराइड करें जिसे आप स्वचालन सहकर्मी का उपयोग करेंगे। इस उदाहरण में मैं AutomationControlType को कन्स्ट्रक्टर पैरामीटर के रूप में पास कर रहा हूं। यदि आप अपने विंडोज़ पर अपने कस्टम ऑटोमेशन पीयर को लागू करते हैं तो इसे अपनी समस्याओं का समाधान करना चाहिए क्योंकि मुझे लगता है कि रूट तत्व का उपयोग सभी बच्चों को वापस करने के लिए किया जाता है।

public class MockAutomationPeer : FrameworkElementAutomationPeer 
{ 
    AutomationControlType _controlType; 

    public MockAutomationPeer(FrameworkElement owner, AutomationControlType controlType) 
     : base(owner) 
    { 
     _controlType = controlType; 
    } 

    protected override string GetNameCore() 
    { 
     return "MockAutomationPeer"; 
    } 

    protected override AutomationControlType GetAutomationControlTypeCore() 
    { 
     return _controlType; 
    } 

    protected override List<AutomationPeer> GetChildrenCore() 
    { 
     return new List<AutomationPeer>(); 
    } 
} 

कस्टम स्वचालन सहकर्मी जैसे कि आपका यूआई तत्व में OnCreateAutomationPeer विधि ओवरराइड उपयोग करने के लिए विंडो:

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer() 
{ 
    return new MockAutomationPeer(this, AutomationControlType.Window); 
} 
+0

नीचे वोट के लिए कोई विशेष कारण? मैं इस सवाल का जवाब देने का प्रयास कर रहा हूं "क्या किसी ने टचस्क्रीन प्रक्रियाओं को अक्षम करने के बजाय" बेहतर "फिक्स पाया है"। अगर मेरा उत्तर उपयोगी नहीं है, तो कृपया अपने कारण बताएं। –

+0

हाय @ ग्लेन थॉमस उत्तर देने के लिए समय लेने के लिए धन्यवाद। इसने मेरे स्वचालन सहकर्मी मुद्दे को हल किया है। – Master

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