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 и не обработка события ввода в режиме реального времени, имеющего методы данных событий для преобразования значения Point в систему отсчета объекта. После вызова TransformToVisual
можно вызвать TransformPoint для возвращаемого объекта GeneralTransform.
Примечание
Объект GeneralTransform, возвращаемый этим методом, можно привести к производного типа Transform, но все необходимые методы определяются .GeneralTransform
Вы не можете привести к TranslateTransform , хотя вы можете ожидать, что результатом преобразования будет перевод.