【问题标题】:WPF AutomationPeer not returning Bounding RectangleWPF AutomationPeer不返回边界矩形
【发布时间】:2015-11-18 04:30:35
【问题描述】:

我正在使用两类拇指控件:

  • AutomatedThumb
  • TouchEnabledThumb

TouchEnabledThumb 类就是这样,它是基本 WPF thumb 类的扩展。 AutomatedThumb 是我的一个实验。

我无法让 UI 自动化框架与控件交互。起初,它们出现在 UI 自动化验证中,显示为灰色,没有边界框。我已经为控件编写了自动化对等类,并为它们提供了OnCreateAutomationPeer 覆盖,这导致控件在 UIAV 中不再灰显,但没有一个控件返回边界矩形,因此我无法将鼠标移动到他们进行互动。

我一直在尝试使用 Owner.RenderTransform.TransformBounds(new Rect(Owner.RenderSize)) 覆盖 GetBoundingRectangleCore,但它们从未将边界框返回到自动化树。

有什么想法吗?

提前致谢!

更新

我尝试让GetBoundingRectanbleCore 返回一个值为(1.0, 1.0, 5.0, 5.0) 的Rect,并且边界框会按我想要的方式显示。我只需要弄清楚如何获取实际控件的边界矩形。

【问题讨论】:

    标签: c# wpf automated-tests ui-automation


    【解决方案1】:

    我发现GetBoundingRectangleCore 的Thumb 控件以及派生控件存在问题。返回的Rect 对象按预期出现在左上角,但它的高度和宽度为0,这似乎使自动化树异常并且没有显示边界框。

    所以我和同事想出的解决方案如下:

    protected override GetBoundingRectangleCore()
    {
        var result = base.GetBoundingRectangleCore();
        if(result.Width == 0 || result.Height == 0)
            return new Rect(result.TopLeft, new Point(result.Left + 1, result.Bottom + 1));
    
        return result;
    }
    

    我希望这可以帮助其他正在努力解决这个问题的人。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多