WPF AutomationPeer 不返回边界矩形

WPF AutomationPeer not returning Bounding Rectangle

我有两个 class 正在使用的拇指控件:

TouchEnabledThumb class 就是对基本 WPF 缩略图 class 的扩展。 AutomatedThumb 是我的实验。

我无法让 UI 自动化框架与控件进行交互。起初它们出现在 UI Automation Verify 中,显示为灰色,没有边界框。我已经为控件编写了自动化对等 classes 并给了它们两个 OnCreateAutomationPeer 覆盖,这导致控件在 UIAV 中不再变灰,但是 none这些控件 return 是一个边界矩形,所以我无法将鼠标移到它们上面进行交互。

我一直在尝试使用 Owner.RenderTransform.TransformBounds(new Rect(Owner.RenderSize)) 覆盖 GetBoundingRectangleCore,但它们从来没有 return 自动化树的边界框。

有什么想法吗?

提前致谢!

更新

我试过 GetBoundingRectanbleCore return 一个值为 (1.0, 1.0, 5.0, 5.0)Rect 并且边界框显示如我所愿。我只需要弄清楚如何获取实际控件的边界矩形。

我发现 GetBoundingRectangleCoreThumb 控件和派生控件存在问题。返回的 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;
}

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