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 neste objeto para obter uma transformação prática.
Exemplos
Este exemplo mostra um cenário de chamada TransformToVisual para interpretar as coordenadas de um PointerPoint no quadro de referência de coordenada de um elemento que não é o remetente de eventos. Aqui, o queryPointer método primeiro acessa coordenadas que se relacionam com o 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 na entrada do ponteiro handle do tópico.
<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 coordenada 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 ou outras alterações de RenderTransform posição.
O cenário mais comum é TransformToVisual se você quiser usar um sistema de coordenadas local em relação ao UIElement em que o chama e não estiver tratando 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 ligar TransformToVisual, você poderá chamar o TransformPoint no GeneralTransform retornado.
Note
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.
Aplica-se a
Confira também
- GeneralTransform
- Definir layouts com XAML
- Exemplo de transformações bidimensionais XAML