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 результатов в пользовательском интерфейсе и вызове), см. полный пример кода, показанный в вводе указателя на раздел.

    <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 для получения смещения координат между двумя элементами в пользовательском интерфейсе. Первым элементом, который считается, является UIElement , в котором вы вызываете TransformToVisual, второй элемент является UIElement передаваемым в качестве visual параметра. Например, можно использовать преобразование, чтобы определить, как границы элемента расположены в системе координат, которая относится к родительскому элементу макета, а не в окне приложения.

TransformToVisual предоставляет результаты координат после применения всех соображений, влияющих на отрисовку и позиционирование, например RenderTransform . Это полезно, если вы обрабатываете значения точек, полученные во время анимации RenderTransform или других изменений позиции.

Наиболее распространенный сценарий TransformToVisual заключается в том, чтобы использовать локальную систему координат относительно вызываемого пользовательского элемента UIElement , и вы не обрабатываете событие ввода в режиме реального времени с методами данных событий для преобразования значения точки в рамку ссылок объекта. После вызова TransformToVisualможно вызвать TransformPoint в возвращаемом generalTransform.

Note

Объект GeneralTransform , возвращаемый этим методом, можно привести к производного типа, transform, но все необходимые методы определяются GeneralTransform. Вы не можете приведение к TranslateTransform , даже если вы можете ожидать, что результат преобразования будет переводом.

Применяется к

См. также раздел