次の方法で共有


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 して、XAML ツリーの上位にある複数の包含レイヤーであるレイアウト コンテナーの参照フレーム page にポイント座標を変換します。 このコードのその他のコンテキストを確認するには (UI での結果の表示方法 queryPointer と呼び出し時の表示を含む)、トピック「 ポインター入力を処理する」に示されている完全なコード例を参照してください。

    <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;
}

注釈

UI 内の 2 つの要素間の座標オフセットを取得するために を呼び出 TransformToVisual します。 考慮される最初の要素は UIElement で、 TransformToVisual2 番目の要素は UIElement パラメーターとして渡す visual 要素です。 たとえば、 変換を使用して、要素の境界が、アプリのウィンドウではなく、レイアウトの親要素に対して相対的な座標系でどのように配置されるかを決定できます。

TransformToVisual は、RenderTransform などのレンダリングや配置に影響を与えるすべての考慮事項が適用された後に座標結果を提供します。 これは、 またはその他の位置の変更のアニメーション RenderTransform 中に取得されたポイント値を処理する場合に便利です。

最も一般的なシナリオ TransformToVisual は、呼び出した UIElement を基準にしてローカル座標系を使用し、 Point 値をオブジェクトの参照フレームに変換するためのイベント データ メソッドを持つリアルタイム入力イベントを処理しない場合です。 を呼び出TransformToVisualした後、返された GeneralTransformTransformPoint を呼び出すことができます。

注意

このメソッドによって返される GeneralTransform オブジェクトは、派生型 Transform にキャストできますが、必要なすべてのメソッドは によって GeneralTransform定義されます。 変換結果が翻訳であると予想される場合でも 、TranslateTransform にキャストすることはできません。

適用対象

こちらもご覧ください