UIElement.TransformToVisual(UIElement) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un oggetto transform che può essere usato per trasformare le coordinate dall'oggetto 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 a scopo di ottenere la trasformazione.
Se questo parametro è Null, viene usata la radice dell'albero XAML.
Restituisce
Informazioni sulla trasformazione come oggetto. Chiamare i metodi in questo oggetto per ottenere una trasformazione pratica.
Esempio
In questo esempio viene illustrato uno scenario per la chiamata TransformToVisual
per interpretare le coordinate da un PointerPoint nel frame di riferimento di 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 del punto nel frame di riferimento per il page
contenitore di layout che è effettivamente diversi livelli di contenimento superiore nell'albero XAML. Per altre informazioni sul contesto per questo codice , incluso il queryPointer
modo in cui vengono visualizzati i risultati nell'interfaccia utente e quando viene chiamato, vedere l'esempio di codice completo visualizzato nell'input del puntatore handle dell'argomento.
<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 è il UIElement
passaggio come visual
parametro. Ad esempio, è possibile 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 i risultati delle coordinate dopo tutte le considerazioni che influiscono sul rendering e sulla posizione, ad esempio RenderingTransform , sono stati applicati. Ciò è utile se si elaborano i valori del punto ottenuti durante un'animazione di o altre modifiche alla RenderTransform
posizione.
Lo scenario più comune per TransformToVisual
è se si vuole usare un sistema di coordinate locale relativo all'UIElement in cui viene chiamato e non si gestisce un evento di input in tempo reale con metodi di dati di evento per la conversione di un valore Point nel frame di riferimento dell'oggetto. Dopo aver chiamato , è quindi possibile chiamare TransformToVisual
TransformPoint nell'oggetto GeneralTransform restituito.
Nota
L'oggetto GeneralTransform restituito da questo metodo può essere eseguito il cast in un tipo derivato, Transform, ma tutti i metodi necessari sono definiti da GeneralTransform
. Non è possibile eseguire il cast in TranslateTransform anche se potrebbe essere previsto che il risultato della trasformazione sia una traduzione.