UIElement.TransformToVisual(UIElement) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
Parameter
- visual
- UIElement
Objek untuk dibandingkan dengan objek saat ini untuk tujuan mendapatkan transformasi.
Jika parameter ini null, maka akar pohon XAML digunakan.
Mengembalikan
Informasi transformasi sebagai objek. Panggil metode pada objek ini untuk mendapatkan transformasi praktis.
Contoh
Contoh ini memperlihatkan skenario untuk memanggil TransformToVisual
untuk menginterpretasikan koordinat dari PointerPoint dalam bingkai referensi koordinat elemen yang bukan pengirim peristiwa. Di sini, queryPointer
metode pertama-tama mengakses koordinat yang berhubungan dengan pengirim tetapi kemudian menggunakan TransformToVisual
untuk mengonversi koordinat titik menjadi bingkai referensi untuk page
kontainer tata letak yang sebenarnya beberapa lapisan penahanan lebih tinggi di pohon XAML. Untuk melihat konteks selengkapnya untuk kode ini (termasuk melihat bagaimana queryPointer
tampilan menghasilkan UI dan saat dipanggil), lihat contoh kode lengkap yang ditampilkan dalam topik Menangani input penunjuk.
<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;
}
Keterangan
Panggil TransformToVisual
untuk mendapatkan offset koordinat antara dua elemen dalam UI. Elemen pertama yang sedang dipertimbangkan adalah UIElement tempat Anda memanggil TransformToVisual
, elemen kedua adalah yang UIElement
Anda lewati visual
sebagai parameter . Misalnya, Anda dapat menggunakan transformasi untuk menentukan bagaimana batas elemen diposisikan dalam sistem koordinat yang relatif terhadap elemen induk tata letak, bukan jendela aplikasi.
TransformToVisual
memberikan hasil koordinat setelah semua pertimbangan yang memengaruhi penyajian dan penempatan seperti RenderTransform telah diterapkan. Ini berguna jika Anda memproses nilai titik yang diperoleh selama animasi RenderTransform
atau perubahan posisi lainnya.
Skenario yang paling umum adalah TransformToVisual
jika Anda ingin menggunakan sistem koordinat lokal yang relatif terhadap UIElement tempat Anda memanggilnya, dan Anda tidak menangani peristiwa input real-time yang memiliki metode data peristiwa untuk mengonversi nilai Titik menjadi bingkai referensi objek. Setelah Anda memanggil TransformToVisual
, Anda kemudian dapat memanggil TransformPoint pada GeneralTransform yang dikembalikan.
Catatan
Objek GeneralTransform yang dikembalikan oleh metode ini dapat ditransmisikan ke jenis turunan, Transformasi, tetapi semua metode yang Anda butuhkan ditentukan oleh GeneralTransform
. Anda tidak dapat mentransmisikan ke TranslateTransform meskipun Anda mungkin mengharapkan bahwa hasil transformasi akan menjadi terjemahan.