Freigeben über


UIElement.TransformToVisual(UIElement) Methode

Definition

Gibt ein Transformationsobjekt zurück, das verwendet werden kann, um Koordinaten vom UIElement in das angegebene Objekt zu transformieren.

public:
 virtual GeneralTransform ^ TransformToVisual(UIElement ^ visual) = TransformToVisual;
GeneralTransform TransformToVisual(UIElement const& visual);
public GeneralTransform TransformToVisual(UIElement visual);
function transformToVisual(visual)
Public Function TransformToVisual (visual As UIElement) As GeneralTransform

Parameter

visual
UIElement

Das Objekt, das zum Abrufen der Transformation mit dem aktuellen Objekt verglichen werden soll.

Wenn dieser Parameter NULL ist, wird der Stamm der XAML-Struktur verwendet.

Gibt zurück

Die Transformationsinformationen als Objekt. Rufen Sie Methoden für dieses Objekt auf, um eine praktische Transformation zu erhalten.

Beispiele

Dieses Beispiel zeigt ein Szenario für den Aufruf TransformToVisual , um die Koordinaten von einem PointerPoint im Koordinatenreferenzrahmen eines Elements zu interpretieren, das nicht der Ereignisabsender ist. Hier greift die queryPointer -Methode zuerst auf Koordinaten zu, die sich auf den Absender beziehen, verwendet dann später, um Punktkoordinaten TransformToVisual in den Referenzrahmen für den Layoutcontainer zu konvertieren, der page tatsächlich mehrere Ebenen des Containments höher in der XAML-Struktur ist. Weitere Kontexte für diesen Code (einschließlich der queryPointer Anzeige von Ergebnissen in der Benutzeroberfläche und beim Aufruf) finden Sie im vollständigen Codebeispiel, das im Thema Handle-Zeigereingabe gezeigt wird.

    <Page
    x:Class="PointerInput.MainPage"
    IsTabStop="false"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:PointerInput"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Name="page">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="150" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="320" />
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Canvas Name="Container" 
                Grid.Column="0"
                Grid.Row="1"
                HorizontalAlignment="Center" 
                VerticalAlignment="Center" 
                Margin="0,0,0,0" 
                Height="320"  Width="640">
            <Rectangle Name="Target" 
                       Fill="#FF0000" 
                       Stroke="Black" 
                       StrokeThickness="0"
                       Height="320" Width="640" />
        </Canvas>
        <TextBox Name="eventLog" 
                 Grid.Column="1"
                 Grid.Row="0"
                 Grid.RowSpan="3" 
                 Background="#000000" 
                 TextWrapping="Wrap" 
                 Foreground="#FFFFFF" 
                 ScrollViewer.VerticalScrollBarVisibility="Visible" 
                 BorderThickness="0"/>
    </Grid>
</Page>
String queryPointer(PointerPoint ptrPt)
{
    String details = "";

    switch (ptrPt.PointerDevice.PointerDeviceType)
    {
        case Windows.Devices.Input.PointerDeviceType.Mouse:
            details += "\nPointer type: mouse";
            break;
        case Windows.Devices.Input.PointerDeviceType.Pen:
            details += "\nPointer type: pen";
            if (ptrPt.IsInContact)
            {
                details += "\nPressure: " + ptrPt.Properties.Pressure;
                details += "\nrotation: " + ptrPt.Properties.Orientation;
                details += "\nTilt X: " + ptrPt.Properties.XTilt;
                details += "\nTilt Y: " + ptrPt.Properties.YTilt;
                details += "\nBarrel button pressed: " + ptrPt.Properties.IsBarrelButtonPressed;
            }
            break;
        case Windows.Devices.Input.PointerDeviceType.Touch:
            details += "\nPointer type: touch";
            details += "\nrotation: " + ptrPt.Properties.Orientation;
            details += "\nTilt X: " + ptrPt.Properties.XTilt;
            details += "\nTilt Y: " + ptrPt.Properties.YTilt;
            break;
        default:
            details += "\nPointer type: n/a";
            break;
    }

    GeneralTransform gt = Target.TransformToVisual(page);
    Point screenPoint;

    screenPoint = gt.TransformPoint(new Point(ptrPt.Position.X, ptrPt.Position.Y));
    details += "\nPointer Id: " + ptrPt.PointerId.ToString() +
        "\nPointer location (parent): " + ptrPt.Position.X + ", " + ptrPt.Position.Y +
        "\nPointer location (screen): " + screenPoint.X + ", " + screenPoint.Y;
    return details;
}

Hinweise

Rufen Sie TransformToVisual auf, um einen Koordinatenoffset zwischen zwei Elementen auf einer Benutzeroberfläche abzurufen. Das erste Element, das berücksichtigt wird, ist das UIElement , bei dem Sie aufrufen TransformToVisual, das zweite Element ist das, das UIElement Sie als visual Parameter übergeben. Beispielsweise können Sie die Transformation verwenden, um zu bestimmen, wie die Grenzen eines Elements in einem Koordinatensystem positioniert werden, das relativ zu einem übergeordneten Layoutelement und nicht dem Fenster der App ist.

TransformToVisual gibt Koordinatenergebnisse an, nachdem alle Überlegungen angewendet wurden, die sich auf das Rendering und die Positionierung auswirken, z. B. RenderTransform . Dies ist nützlich, wenn Sie Punktwerte verarbeiten, die während einer Animation von RenderTransform oder anderen Positionsänderungen abgerufen wurden.

Das häufigste Szenario für TransformToVisual ist, wenn Sie ein lokales Koordinatensystem relativ zum UIElement verwenden möchten, in dem Sie es aufrufen, und Sie kein Echtzeiteingabeereignis behandeln, das Ereignisdatenmethoden zum Konvertieren eines Point-Werts in den Referenzrahmen des Objekts enthält. Nachdem Sie aufgerufen TransformToVisualhaben, können Sie TransformPoint für die zurückgegebene GeneralTransform aufrufen.

Hinweis

Das von dieser Methode zurückgegebene GeneralTransform-Objekt kann in den abgeleiteten Typ Transform umgewandelt werden, aber alle erforderlichen Methoden werden von GeneralTransformdefiniert. Sie können keine Umwandlung in TranslateTransform ausführen, obwohl Sie möglicherweise erwarten, dass das Transformationsergebnis eine Übersetzung ist.

Gilt für:

Weitere Informationen