我当前正在尝试实现Move(double x, double y)
作为UI自动化提供商API中ITransformProvider
的一部分。规格说,在移动元素后,我必须提出一个界面式旋转的事件。
// Save original location to raise an event
System.Windows.Rect oldBoundingRectangle = BoundingRectangle;
// ... Move logic code here ...
// Raise BoundingRectanglePropertyChanged event if clients are listening
if (AutomationInteropProvider.ClientsAreListening)
{
AutomationPropertyChangedEventArgs propertyChangedArgs = new AutomationPropertyChangedEventArgs(AutomationElementIdentifiers.BoundingRectangleProperty, oldBoundingRectangle, BoundingRectangle);
AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this, propertyChangedArgs);
}
this
在上面的代码中实现IRawElementProviderFragment
。
AutomationInteropProvider.RaiseAutomationPropertyChangedEvent()
的呼叫提出了一个带有消息的参数exception" 值不在预期的范围内。"
这是一条相当通用的错误消息,我在隔离原因方面遇到困难。事件args的旧参数和新参数均为type system.windows.rect,boundingRectangle属性也是如此。
我什至尝试使用redgate反射器对uiautomationprovider.dll进行反复编译并生成调试符号。当我们在AutomationInteropProvider::RaiseAutomationPropertyChangedEvent(IRawElementProviderSimple element, AutomationPropertyChangedEventArgs e).
中调用ValidateArgumentNonNull(e, "e");
时,该异常会被抛出,除了ValidateArgumentNonNull()
的主体从未被调用(内部的断点从未被击中(。我怀疑将dll分解不可靠,这是一个错误的铅。
在不相关的注意事项上,我能够为ISSELEDED提出财产更改的事件。
还有其他人经历过吗?预先感谢您!
在逻辑上触底调试此次调试后,我们开始尝试随机值以在黑盒测试方式中查看什么作用。
if (AutomationInteropProvider.ClientsAreListening)
{
// Passing anything other than null for the oldValue and newValue results in an ArgumentException of "Value does not fall within expected range" Not sure why?
AutomationPropertyChangedEventArgs propertyChangedArgs = new AutomationPropertyChangedEventArgs(AutomationElementIdentifiers.BoundingRectangleProperty, null, null);
AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this, propertyChangedArgs);
}
我仍然不确定为什么要为OldValue和NewValue的作品提供零。该文档没有迹象表明我应该通过新价值和新价值以外的任何内容。UIAVERIFY测试正在通过,因此我正在努力假设这是正确的解决方案。不知道为什么。
Microsoft文档指出,界线无法在属性条件中使用。
属性参数不能是边界rectangleproperty。
如果一个人试图传递任何其他值,则将null作为界点的属性值,则使用"值"升高的crigntException不在预期的范围内。
。https://learn.microsoft.com/en-us/dotnet/api/system.windows.automation.propertycondition.-ctor