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

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

如果此參數為 null,則會使用 XAML 樹狀結構的根目錄。

傳回

轉換資訊做為 物件。 呼叫這個 物件上的方法,以取得實際轉換。

範例

此範例示範呼叫 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 中兩個專案之間的座標位移。 要考慮的第一個專案是您呼叫 TransformToVisualUIElement,第二個元素是您 UIElement 傳遞做為 參數的 visual 。 例如,您可以使用轉換來判斷元素界限如何放置在相對於配置父元素的座標系統中,而不是應用程式視窗。

TransformToVisual 在已套用 RenderTransform 等所有會影響轉譯和定位的考慮之後,提供座標結果。 如果您正在處理動畫 RenderTransform 期間取得的點值或其他位置變更,這會很有用。

最常見的案例 TransformToVisual 是,如果您想要使用相對於所呼叫 UIElement 的本機座標系統,而且您不會處理具有將 Point 值轉換成物件參考框架的即時輸入事件。 呼叫 TransformToVisual 之後,您就可以在傳回的GeneralTransform上呼叫TransformPoint

注意

這個方法傳回的 GeneralTransform 物件可以轉換成衍生類型 Transform,但您需要的所有方法都是由 GeneralTransform 定義。 即使您可能預期轉換結果為翻譯,您也無法轉換成 TranslateTransform

適用於

另請參閱