UIElement.TransformToVisual(UIElement) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt ein Transformationsobjekt zurück, das verwendet werden kann, um Koordinaten vom UIElement in das angegebene Objekt zu transformieren.
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
Parameter
- visual
- UIElement
Das Objekt, das zum Abrufen der Transformation mit dem aktuellen Objekt verglichen werden soll.
Wenn dieser Parameter NULL ist, wird der Stamm der XAML-Struktur verwendet.
Gibt zurück
Die Transformationsinformationen als Objekt. Rufen Sie Methoden für dieses Objekt auf, um eine praktische Transformation zu erhalten.
Beispiele
Dieses Beispiel zeigt ein Szenario für den Aufruf TransformToVisual
, um die Koordinaten von einem PointerPoint im Koordinatenreferenzrahmen eines Elements zu interpretieren, das nicht der Ereignisabsender ist. Hier greift die queryPointer
-Methode zuerst auf Koordinaten zu, die sich auf den Absender beziehen, verwendet dann später, um Punktkoordinaten TransformToVisual
in den Referenzrahmen für den Layoutcontainer zu konvertieren, der page
tatsächlich mehrere Ebenen des Containments höher in der XAML-Struktur ist. Weitere Kontexte für diesen Code (einschließlich der queryPointer
Anzeige von Ergebnissen in der Benutzeroberfläche und beim Aufruf) finden Sie im vollständigen Codebeispiel, das im Thema Handle-Zeigereingabe gezeigt wird.
<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;
}
Hinweise
Rufen Sie TransformToVisual
auf, um einen Koordinatenoffset zwischen zwei Elementen auf einer Benutzeroberfläche abzurufen. Das erste Element, das berücksichtigt wird, ist das UIElement , bei dem Sie aufrufen TransformToVisual
, das zweite Element ist das, das UIElement
Sie als visual
Parameter übergeben. Beispielsweise können Sie die Transformation verwenden, um zu bestimmen, wie die Grenzen eines Elements in einem Koordinatensystem positioniert werden, das relativ zu einem übergeordneten Layoutelement und nicht dem Fenster der App ist.
TransformToVisual
gibt Koordinatenergebnisse an, nachdem alle Überlegungen angewendet wurden, die sich auf das Rendering und die Positionierung auswirken, z. B. RenderTransform . Dies ist nützlich, wenn Sie Punktwerte verarbeiten, die während einer Animation von RenderTransform
oder anderen Positionsänderungen abgerufen wurden.
Das häufigste Szenario für TransformToVisual
ist, wenn Sie ein lokales Koordinatensystem relativ zum UIElement verwenden möchten, in dem Sie es aufrufen, und Sie kein Echtzeiteingabeereignis behandeln, das Ereignisdatenmethoden zum Konvertieren eines Point-Werts in den Referenzrahmen des Objekts enthält. Nachdem Sie aufgerufen TransformToVisual
haben, können Sie TransformPoint für die zurückgegebene GeneralTransform aufrufen.
Hinweis
Das von dieser Methode zurückgegebene GeneralTransform-Objekt kann in den abgeleiteten Typ Transform umgewandelt werden, aber alle erforderlichen Methoden werden von GeneralTransform
definiert. Sie können keine Umwandlung in TranslateTransform ausführen, obwohl Sie möglicherweise erwarten, dass das Transformationsergebnis eine Übersetzung ist.