Linguaggio

UIElement.TransformToVisual(UIElement) Metodo

Definizione

Restituisce un oggetto transform che può essere utilizzato per trasformare le coordinate da UIElement all'oggetto specificato.

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

Parametri

visual
UIElement

Oggetto da confrontare con l'oggetto corrente per ottenere la trasformazione.

Se questo parametro è Null, viene usata la radice dell'albero XAML.

Valori restituiti

Informazioni sulla trasformazione come oggetto . Chiamare metodi su questo oggetto per ottenere una trasformazione pratica.

Esempio

In questo esempio viene illustrato uno scenario per chiamare TransformToVisual per interpretare le coordinate di un puntatore nel frame di riferimento delle coordinate di un elemento che non è il mittente dell'evento. In questo caso, il queryPointer metodo accede prima alle coordinate correlate al mittente, ma successivamente usa TransformToVisual per convertire le coordinate dei punti nel frame di riferimento per il page contenitore di layout che è effettivamente diversi livelli di contenimento superiore nell'albero XAML. Per visualizzare più contesto per questo codice (inclusa la visualizzazione dei queryPointer risultati nell'interfaccia utente e quando viene chiamato), vedere l'esempio di codice completo illustrato nell'argomento Gestire l'input del puntatore.

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

Commenti

Chiamare TransformToVisual per ottenere un offset di coordinate tra due elementi in un'interfaccia utente. Il primo elemento considerato è uiElement in cui si chiama TransformToVisual, il secondo elemento è quello UIElement passato come visual parametro. Ad esempio, puoi usare la trasformazione per determinare il modo in cui i limiti di un elemento vengono posizionati in un sistema di coordinate relativo a un elemento padre del layout, anziché alla finestra dell'app.

TransformToVisual fornisce risultati delle coordinate dopo tutte le considerazioni che influiscono sul rendering e sul posizionamento, ad esempio RenderTransform , sono state applicate. Ciò è utile se si elaborano i valori dei punti ottenuti durante un'animazione di o altre modifiche di RenderTransform posizione.

Lo scenario più comune per TransformToVisual è se si vuole usare un sistema di coordinate locale relativo all'oggetto UIElement su cui viene chiamato e non si gestisce un evento di input in tempo reale con metodi di dati dell'evento per convertire un valore Point nella cornice di riferimento dell'oggetto. Dopo aver chiamato , è possibile chiamare TransformToVisualTransformPoint sul generalTransform restituito.

Note

L'oggetto GeneralTransform restituito da questo metodo può essere sottoposto a cast a un tipo derivato, Transform, ma tutti i metodi necessari sono definiti da GeneralTransform. Non è possibile eseguire il cast in TranslateTransform anche se ci si potrebbe aspettare che il risultato della trasformazione sia una traduzione.

Si applica a

Vedi anche