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 zum Transformieren von Koordinaten vom UIElement in das angegebene Objekt verwendet werden kann.
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 mit dem aktuellen Objekt verglichen werden soll, um die Transformation zu erhalten.
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 zum Aufrufen TransformToVisual , um die Koordinaten aus einem PointerPoint im Koordinatenverweisframe eines Elements zu interpretieren, das nicht der Ereignissender ist. Hier greift die queryPointer Methode zuerst auf Koordinaten zu, die sich auf den Absender beziehen, aber später verwendet, TransformToVisual um Punktkoordinaten in den Referenzframe für den page Layoutcontainer zu konvertieren, der tatsächlich mehrere Ebenen der Eindämmung höher in der XAML-Struktur ist. Weitere Kontexte für diesen Code (einschließlich der Anzeige der queryPointer Ergebnisse in der Benutzeroberfläche und beim Aufrufen) finden Sie im vollständigen Codebeispiel, das im Thema Behandeln von Zeigereingaben 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 Koordinatenversatz zwischen zwei Elementen in einer Benutzeroberfläche zu erhalten. Das erste Element, das berücksichtigt wird, ist das UIElement , bei dem Sie aufrufen TransformToVisual, das zweite Element ist die UIElement Übergeben als visual Parameter. Sie können beispielsweise 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 Koordinatenergebnissen, nachdem alle Überlegungen, die sich auf das Rendern und die Positionierung wie RenderTransform auswirken, angewendet wurden. Dies ist nützlich, wenn Sie Punktwerte verarbeiten, die während einer Animation RenderTransform von oder anderen Positionsänderungen abgerufen wurden.
Das häufigste Szenario TransformToVisual ist, wenn Sie ein lokales Koordinatensystem relativ zum UIElement verwenden möchten, für das Sie es aufrufen, und Sie behandeln kein Echtzeiteingabeereignis mit Ereignisdatenmethoden zum Konvertieren eines Punktwerts in den Referenzrahmen des Objekts. Nach dem Aufrufen TransformToVisualkönnen Sie TransformPoint für die zurückgegebene GeneralTransform aufrufen.
Hinweis
Das von dieser Methode zurückgegebene GeneralTransform-Objekt kann in einen abgeleiteten Typ umgewandelt werden, Transform, aber alle benötigten Methoden werden durch GeneralTransformdefiniert. Sie können nicht in TranslateTransform umwandeln, obwohl Sie möglicherweise davon ausgehen, dass das Transformationsergebnis eine Übersetzung wäre.