UIElement.TransformToVisual(UIElement) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回一个转换对象,该对象可用于将 坐标从 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
参数
返回
作为 对象的转换信息。 对此对象调用方法以获取实际转换。
示例
此示例演示了一个方案,用于调用 TransformToVisual
以解释不是事件发送方的元素的坐标参考框架中的 PointerPoint 的坐标。 在这里, queryPointer
方法首先访问与发送方相关的坐标,但随后使用 TransformToVisual
将点坐标转换为布局容器的参考框架 page
,而布局容器实际上是 XAML 树中较高层的包含层。 若要查看此代码 (的更多上下文,包括如何在 queryPointer
UI 中显示结果以及何时) 调用它,请参阅 处理指针输入主题中显示的完整代码示例。
<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
以获取 UI 中两个元素之间的坐标偏移量。 要考虑的第一个元素是调用 TransformToVisual
的 UIElement,第二个元素是UIElement
作为 参数传递的 visual
。 例如,可以使用转换来确定元素边界在相对于布局父元素(而不是应用窗口)的坐标系中的定位方式。
TransformToVisual
在应用了影响呈现和定位的所有注意事项(如 RenderTransform )后提供坐标结果。 如果要处理在 动画或其他位置更改期间获取的 RenderTransform
点值,这非常有用。
最常见的方案 TransformToVisual
是,如果要使用相对于调用它的 UIElement 的本地坐标系,并且未处理具有用于将 Point 值转换为对象的参照系的事件数据方法的实时输入事件。 调用 TransformToVisual
后,可以对返回的 GeneralTransform 调用 TransformPoint。
注意
此方法返回的 GeneralTransform 对象可以强制转换为派生类型 Transform,但需要的所有方法都由 GeneralTransform
定义。 无法强制转换为 TranslateTransform ,即使你可能希望转换结果为翻译。