我創建了一個WPF應用程序。它在桌面上運行得非常好,但應用程序在運行在觸摸屏上的應用程序崩潰了。我關閉了觸摸屏流程,應用程序運行良好。我不知道有沒有人發現了一個「更好」的修復,而不是禁用觸摸屏的過程,因爲這不是微軟的Surface或和Windows平板電腦上運行。WPF的AutomationPeer崩潰在觸摸屏設備
我目前使用.NET 4.5
我創建了一個WPF應用程序。它在桌面上運行得非常好,但應用程序在運行在觸摸屏上的應用程序崩潰了。我關閉了觸摸屏流程,應用程序運行良好。我不知道有沒有人發現了一個「更好」的修復,而不是禁用觸摸屏的過程,因爲這不是微軟的Surface或和Windows平板電腦上運行。WPF的AutomationPeer崩潰在觸摸屏設備
我目前使用.NET 4.5
我曾與WPF AutomationPeer
太多的問題。
您可能能夠通過迫使你的WPF UI元素使用的是通過不返回子控件的AutomationPeers表現不同的默認一個自定義的AutomationPeer解決您的問題。這可能會阻止任何UI自動化的東西的工作,但希望在你的情況,因爲在我,你是不是使用UI自動化..
創建從FrameworkElementAutomationPeer
繼承和覆蓋GetChildrenCore
方法定製自動化同級類,返回一個空列表而不是子控制自動化同行。當某些事情試圖通過AutomationPeers樹進行迭代時,這應該可以避免發生問題。
而且覆蓋GetAutomationControlTypeCore
指定要使用的自動化同級控件類型。在這個例子中,我通過AutomationControlType
作爲構造函數參數。如果你申請你的自定義自動對您的Windows應該解決您的問題,我認爲根元素用於返回所有兒童。
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>();
}
}
要使用自定義自動化對等項,請覆蓋UI元素中的OnCreateAutomationPeer
方法,例如,窗口:
protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
{
return new MockAutomationPeer(this, AutomationControlType.Window);
}
投票的任何特定原因?我試圖回答這個問題:「有沒有人發現一個」更好「的解決方案,而不是禁用觸摸屏進程」。如果我的回答沒有用,請說明您的理由。 –
喜@Glen托馬斯感謝您抽出時間來回答。這已解決了我的自動化對等問題。 – Master
你可以顯示在代碼中你得到一個異常拋出? – Terrance