IRawElementProviderFragmentRoot.ElementProviderFromPoint Metod

Definition

Hämtar elementet i det här fragmentet som finns på den angivna punkten.

public:
 System::Windows::Automation::Provider::IRawElementProviderFragment ^ ElementProviderFromPoint(double x, double y);
public System.Windows.Automation.Provider.IRawElementProviderFragment ElementProviderFromPoint(double x, double y);
abstract member ElementProviderFromPoint : double * double -> System.Windows.Automation.Provider.IRawElementProviderFragment
Public Function ElementProviderFromPoint (x As Double, y As Double) As IRawElementProviderFragment

Parametrar

x
Double

X-koordinaten.

y
Double

Y-koordinaten.

Returer

Providern för det underordnade elementet vid den angivna punkten, om det finns någon, eller rotprovidern om punkten finns på det här elementet men inte på något underordnat element. Annars returneras null.

Exempel

I följande kodexempel visas en möjlig implementering av den här metoden för en listruta som inte rullar. Indexet för listobjektet vid den angivna punkten beräknas med varje objekts höjd och objektet vid den tidpunkten returneras. Om det inte finns något objekt vid den tidpunkten (till exempel är det ett tomt område i listrutan, returnerar metoden en null-referens (Nothing).

delegate Rectangle MyDelegate(Rectangle clientRect);

/// <summary>
/// Gets the child element that is at the specified point.
/// </summary>
/// <param name="x">Distance from the left of the application window.</param>
/// <param name="y">Distance from the top of the application window.</param>
/// <returns>The provider for the element at that point.</returns>
IRawElementProviderFragment IRawElementProviderFragmentRoot.ElementProviderFromPoint(
    double x, double y)
{
    // The RectangleToScreen method on the control can't be called directly from 
    // this thread, so use delegation.
    MyDelegate del = new MyDelegate(this.RectangleToScreen);
    Rectangle screenRectangle = (Rectangle)this.Invoke(del, new object[] { this.DisplayRectangle });

    if (screenRectangle.Contains((int)x, (int)y))
    {
        int index = (int)(((int)(y - screenRectangle.Y)) / itemHeight);
        if (index < myItems.Count)
        {
            return (IRawElementProviderFragment)myItems[index];
        }
        else
        {
            return (IRawElementProviderFragment)this;
        }
    }
    else
    {
        return null;
    }
}
Delegate Function MyDelegate(ByVal clientRect As Rectangle) As Rectangle

''' <summary>
''' Gets the child element that is at the specified point.
''' </summary>
''' <param name="x">Distance from the left of the application window.</param>
''' <param name="y">Distance from the top of the application window.</param>
''' <returns>The provider for the element at that point.</returns>
Function ElementProviderFromPoint(ByVal x As Double, ByVal y As Double) As IRawElementProviderFragment _
    Implements IRawElementProviderFragmentRoot.ElementProviderFromPoint

    Dim pointX As Integer = CInt(x)
    Dim pointY As Integer = CInt(y)

    ' The RectangleToScreen method on the control can't be called directly from 
    ' this thread, so use delegation.
    Dim converterDelegate As MyDelegate = New MyDelegate(AddressOf Me.RectangleToScreen)
    Dim screenRectangle As Rectangle = DirectCast(Me.Invoke(converterDelegate, _
        New Object() {Me.DisplayRectangle}), Rectangle)
    If screenRectangle.Contains(pointX, pointY) Then
        Dim index As Integer = CInt((pointY - screenRectangle.Y) \ itemHeight)
        If index < myItems.Count Then
            Return DirectCast(myItems(index), IRawElementProviderFragment)
        Else
            Return DirectCast(Me, IRawElementProviderFragment)
        End If
    Else
        Return Nothing
    End If
End Function

Kommentarer

Om punkten finns på ett element i ett annat ramverk som hanteras av det här fragmentet returnerar metoden det element som är värd för fragmentet.

Den returnerade providern ska motsvara det element som skulle ta emot musindata vid den angivna punkten.

Gäller för

Se även