UIElement.TransformToVisual(UIElement) 方法

定義

回傳一個轉換物件,可用於將座標從 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

物件要與當前物件比較,以便取得轉換。

若此參數為空,則使用 XAML 樹的根節點。

傳回

將資訊轉換為物件。 呼叫這個物件的方法來取得實際的轉換。

範例

這個範例展示了一個情境,用 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 你無法將 轉換,儘管 你可能預期轉換結果會是平移。

適用於

另請參閱