UIElement.TransformToVisual(UIElement) Método

Definición

Devuelve un objeto de transformación que se puede usar para transformar las coordenadas de UIElement en el objeto especificado.

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

Parámetros

visual
UIElement

Objeto que se va a comparar con el objeto actual para obtener la transformación.

Si este parámetro es null, se usa la raíz del árbol XAML.

Devoluciones

Información de transformación como un objeto . Llame a métodos en este objeto para obtener una transformación práctica.

Ejemplos

En este ejemplo se muestra un escenario para llamar TransformToVisual a para interpretar las coordenadas de un PointerPoint en el marco de referencia de coordenadas de un elemento que no es el remitente del evento. Aquí, el queryPointer método accede primero a las coordenadas que se relacionan con el remitente, pero después usa TransformToVisual para convertir las coordenadas de punto en el marco de referencia del page contenedor de diseño que es realmente varias capas de contención más altas en el árbol XAML. Para ver más contexto para este código (incluido ver cómo queryPointer se muestran los resultados en la interfaz de usuario y cuándo se llama), consulte el ejemplo de código completo que se muestra en el tema Controlar entrada de puntero.

    <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;
}

Comentarios

Llame TransformToVisual a para obtener un desplazamiento de coordenadas entre dos elementos de una interfaz de usuario. El primer elemento que se está considerando es el UIElement donde se llama TransformToVisuala , el segundo elemento es el UIElement que se pasa como parámetro visual . Por ejemplo, puede usar la transformación para determinar cómo se colocan los límites de un elemento en un sistema de coordenadas relativo a un elemento primario de diseño, en lugar de la ventana de la aplicación.

TransformToVisual proporciona resultados de coordenadas después de que se hayan aplicado todas las consideraciones que afectan a la representación y posicionamiento, como RenderTransform . Esto es útil si está procesando los valores de punto que se obtuvieron durante una animación de u otros cambios de RenderTransform posición.

El escenario más común para TransformToVisual es si desea usar un sistema de coordenadas local con respecto al UIElement en el que se llama y no controla un evento de entrada en tiempo real que tiene métodos de datos de eventos para convertir un valor point en el marco de referencia del objeto. Después de llamar a TransformToVisual, puede llamar a TransformPoint en el objeto GeneralTransform devuelto.

Nota

El objeto GeneralTransform devuelto por este método se puede convertir en un tipo derivado, Transform, pero todos los métodos que necesita se definen mediante GeneralTransform. No se puede convertir a TranslateTransform aunque se espere que el resultado de la transformación sea una traducción.

Se aplica a

Consulte también