触摸屏设备上的WPF AutomationPeer崩溃
我创建了一个WPF应用程序。 它在桌面上运行得非常好,但应用程序在运行在触摸屏上的应用程序崩溃了。 我关闭了触摸屏流程,应用程序运行良好。 我想知道有没有人发现一个“更好”的修复比禁用触摸屏进程,因为这不适用于微软的表面或Windows平板电脑。
我目前使用.Net 4.5
WPF AutomationPeer
也遇到过很多问题。
您可能可以通过强制您的WPF UI元素使用自定义AutomationPeer来解决您的问题,该自定义AutomationPeer的行为与缺省行为不同,因为它不返回子控件的AutomationPeers。 这可能会阻止任何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
方法,例如Window:
protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
{
return new MockAutomationPeer(this, AutomationControlType.Window);
}
链接地址: http://www.djcxy.com/p/32511.html