UIElement.TransformToVisual(UIElement) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
매개 변수
반환
개체로 변환 정보입니다. 이 개체의 메서드를 호출하여 실제 변환을 가져옵니다.
예제
이 예제에서는 이벤트 발신자가 아닌 요소의 좌표 참조 프레임에 있는 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;
}
설명
를 호출 TransformToVisual
하여 UI의 두 요소 간에 좌표 오프셋을 가져옵니다. 고려되는 첫 번째 요소는 를 호출TransformToVisual
하는 UIElement이며, 두 번째 요소는 매개 변수로 visual
전달하는 입니다UIElement
. 예를 들어 변환을 사용하여 요소의 범위가 앱 창이 아닌 레이아웃 부모 요소를 기준으로 하는 좌표계에 배치되는 방식을 결정할 수 있습니다.
TransformToVisual
는 RenderTransform과 같은 렌더링 및 위치 지정에 영향을 주는 모든 고려 사항이 적용된 후 좌표 결과를 제공합니다. 애니메이션 또는 다른 위치 변경 중에 RenderTransform
얻은 지점 값을 처리하는 경우에 유용합니다.
의 가장 일반적인 시나리오 TransformToVisual
는 호출하는 UIElement 에 상대적인 로컬 좌표계를 사용하려는 경우이며 Point 값을 개체의 참조 프레임으로 변환하기 위한 이벤트 데이터 메서드가 있는 실시간 입력 이벤트를 처리하지 않는 것입니다. 를 호출TransformToVisual
한 후 반환된 GeneralTransform에서 TransformPoint를 호출할 수 있습니다.
참고
이 메서드에서 반환된 GeneralTransform 개체는 파생 형식인 Transform으로 캐스팅할 수 있지만 필요한 모든 메서드는 로 정의 GeneralTransform
됩니다. 변환 결과가 번역이 될 것으로 예상하더라도 TranslateTransform 으로 캐스팅할 수 없습니다.