言語

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 ツリーのルートが使用されます。

返品

オブジェクトとしての変換情報。 このオブジェクトのメソッドを呼び出して、実用的な変換を取得します。

この例では、イベント送信者ではない要素の座標参照フレーム内の PointerPoint からの座標を解釈するために、TransformToVisualを呼び出すシナリオを示します。 ここでは、 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 を呼び出します。 最初の要素は、TransformToVisualを呼び出す UIElement です。2 番目の要素は、visual パラメーターとして渡すUIElementです。 たとえば、変換を使用して、要素の境界が、アプリのウィンドウではなく、レイアウトの親要素に対して相対的な座標系でどのように配置されるかを判断できます。

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

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

Note

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

適用対象

こちらもご覧ください