UIElement.TransformToVisual(UIElement) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 TransformToVisual
a , 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.