UIElement.TransformToVisual(UIElement) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
O objeto a ser comparado ao objeto atual para fins de obtenção da transformação.
Se esse parâmetro for nulo, a raiz da árvore XAML será usada.
Retornos
As informações de transformação como um objeto . Chame métodos nesse objeto para obter uma transformação prática.
Exemplos
Este exemplo mostra um cenário para chamar TransformToVisual
para interpretar as coordenadas de um PointerPoint no quadro de referência de coordenadas de um elemento que não é o remetente do evento. Aqui, o queryPointer
método primeiro acessa coordenadas relacionadas ao remetente, mas depois usa para converter coordenadas TransformToVisual
de ponto no quadro de referência para o page
contêiner de layout que na verdade são várias camadas de contenção mais altas na árvore XAML. Para ver mais contexto para esse código (incluindo ver como queryPointer
exibe os resultados na interface do usuário e quando ele é chamado), consulte o exemplo de código completo mostrado no tópico Entrada do ponteiro handle.
<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;
}
Comentários
Chame TransformToVisual
para obter um deslocamento de coordenadas entre dois elementos em uma interface do usuário. O primeiro elemento que está sendo considerado é o UIElement em que você chama TransformToVisual
, o segundo elemento é o UIElement
que você passa como o visual
parâmetro . Por exemplo, você pode usar a transformação para determinar como os limites de um elemento são posicionados em um sistema de coordenadas relativo a um elemento pai de layout, em vez da janela do aplicativo.
TransformToVisual
fornece resultados de coordenadas depois que todas as considerações que afetam a renderização e o posicionamento, como RenderTransform , foram aplicadas. Isso será útil se você estiver processando valores de ponto que foram obtidos durante uma animação de ou outras alterações de RenderTransform
posição.
O cenário mais comum para TransformToVisual
é se você quiser usar um sistema de coordenadas local em relação ao UIElement em que o chama e não estiver manipulando um evento de entrada em tempo real que tenha métodos de dados de evento para converter um valor Point no quadro de referência do objeto. Depois de chamar TransformToVisual
, você pode chamar TransformPoint no GeneralTransform retornado.
Observação
O objeto GeneralTransform retornado por esse método pode ser convertido em um tipo derivado, Transform, mas todos os métodos necessários são definidos por GeneralTransform
. Você não pode converter em TranslateTransform mesmo que possa esperar que o resultado da transformação seja uma tradução.