WPF AutomationPeer不返回边界矩形

本文关键字:边界 返回 AutomationPeer WPF | 更新日期: 2023-09-27 18:09:39

我有两类拇指控件我正在工作:

  • AutomatedThumb
  • TouchEnabledThumb

TouchEnabledThumb类就是这样,扩展到WPF拇指基类。对我来说,AutomatedThumb是一个实验。

我在让UI自动化框架与控件交互方面遇到了麻烦。起初,它们显示在UI自动化验证中,显示为灰色,没有边界框。我已经为控件编写了自动化对等类,并给他们两个OnCreateAutomationPeer覆盖,这导致控件不再在uav中变灰,但没有一个控件返回一个边界矩形,所以我不能将鼠标移动到它们进行交互。

我一直在尝试用Owner.RenderTransform.TransformBounds(new Rect(Owner.RenderSize))来覆盖GetBoundingRectangleCore,但是他们从来没有返回一个边界框到自动化树。

任何想法?

提前感谢!

我试过让GetBoundingRectanbleCore返回Rect(1.0, 1.0, 5.0, 5.0)的值和边界框显示,就像我想要的。我只需要弄清楚如何获得实际控件的边界矩形

WPF AutomationPeer不返回边界矩形

我发现Thumb控件的GetBoundingRectangleCore有问题,因此衍生控件。返回的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;
}