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
將點座標轉換成配置容器的參考框架, 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 。