UIElement.TransformToVisual(UIElement) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
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
Параметры
- visual
- UIElement
Объект для сравнения с текущим объектом для получения преобразования.
Если этот параметр имеет значение NULL, используется корень дерева XAML.
Возвращаемое значение
Сведения о преобразовании в виде объекта. Вызов методов для этого объекта для получения практического преобразования.
Примеры
В этом примере показан сценарий вызова TransformToVisual для интерпретации координат из PointerPoint в эталонном кадре координат элемента, который не является отправителем события.
queryPointer Здесь метод сначала обращается к координатам, которые относятся к отправителю, но затем позже используется TransformToVisual для преобразования координат точек в эталонный кадр для page контейнера макета, который фактически несколько слоев содержащегося выше в дереве XAML. Дополнительные сведения о контексте этого кода (включая отображение queryPointer результатов в пользовательском интерфейсе и вызове), см. полный пример кода, показанный в вводе указателя на раздел.
<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;
}
Комментарии
Вызов TransformToVisual для получения смещения координат между двумя элементами в пользовательском интерфейсе. Первым элементом, который считается, является UIElement , в котором вы вызываете TransformToVisual, второй элемент является UIElement передаваемым в качестве visual параметра. Например, можно использовать преобразование, чтобы определить, как границы элемента расположены в системе координат, которая относится к родительскому элементу макета, а не в окне приложения.
TransformToVisual предоставляет результаты координат после применения всех соображений, влияющих на отрисовку и позиционирование, например RenderTransform . Это полезно, если вы обрабатываете значения точек, полученные во время анимации RenderTransform или других изменений позиции.
Наиболее распространенный сценарий TransformToVisual заключается в том, чтобы использовать локальную систему координат относительно вызываемого пользовательского элемента UIElement , и вы не обрабатываете событие ввода в режиме реального времени с методами данных событий для преобразования значения точки в рамку ссылок объекта. После вызова TransformToVisualможно вызвать TransformPoint в возвращаемом generalTransform.
Note
Объект GeneralTransform , возвращаемый этим методом, можно привести к производного типа, transform, но все необходимые методы определяются GeneralTransform. Вы не можете приведение к TranslateTransform , даже если вы можете ожидать, что результат преобразования будет переводом.