UIElement.TransformToVisual(UIElement) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 將點座標轉換成 layout 容器的參考框架 page ,而該容器實際上位於 XAML 樹中多層的包含。 想了解更多這段程式碼的上下文(包括顯示結果在 UI 中如何 queryPointer 及何時被呼叫),請參閱主題中的 Handle 指標輸入中展示的完整程式碼範例。
<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 中兩個元素之間的座標偏移量。 第一個考慮的元素是 UIElement ,你在那裡呼叫 TransformToVisual,第二個元素是 UIElement 你傳遞給 visual 參數。 例如,你可以用變換來判斷元素的邊界在座標系中的位置,該座標系相對於佈局的父元素,而非應用程式的視窗。
TransformToVisual 在所有影響渲染與定位的考量(如 RenderTransform )都已應用後,會給出座標結果。 如果你要處理動畫或其他位置變化時 RenderTransform 獲得的點數值,這很有用。
最常見的情況 TransformToVisual 是,如果你想使用相對於你呼叫的 UIElement 的本地座標系統,且你沒有處理一個即時輸入事件,該事件有事件資料方法可以將 點 值轉換成物件的參考系。 呼叫 TransformToVisual後,你可以呼叫回傳的 GeneralTransform 上的 TransformPoint。
Note
此方法回傳的 GeneralTransform 物件可轉換為導出型別 Transform,但所有所需方法皆由 定義。GeneralTransform 你無法將 轉換,儘管 你可能預期轉換結果會是平移。