Nasıl yapılır: Görselin Sapmasını Alma
Bu örnekler, kendi üst veya alt öğe veya alt öğesi ile ilişkili bir görsel nesnenin fark değerinin nasıl alınacağını gösterir.
Örnek
Aşağıdaki biçimlendirme örneği, TextBlock 4 değeriyle tanımlanan bir gösterir Margin .
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
Aşağıdaki kod örneği GetOffset , öğesinin sapmasını almak için yönteminin nasıl kullanılacağını gösterir TextBlock . Aralık değerleri, döndürülen değer içinde yer alır Vector .
// Return the offset vector for the TextBlock object.
Vector vector = VisualTreeHelper.GetOffset(myTextBlock);
// Convert the vector to a point value.
Point currentPoint = new Point(vector.X, vector.Y);
' Return the offset vector for the TextBlock object.
Dim vector As Vector = VisualTreeHelper.GetOffset(myTextBlock)
' Convert the vector to a point value.
Dim currentPoint As New Point(vector.X, vector.Y)
Fark değeri hesaba girer Margin . Bu durumda X 4 ve 4 ' dir Y .
Döndürülen göreli konum değeri, öğesinin üst öğesine görelidir Visual . Bir öğesinin üst öğesiyle ilişkili olmayan bir fark değeri döndürmek istiyorsanız VisualTransformToAncestor yöntemini kullanın.
Bir üst öğeye göre uzaklığın alınması
Aşağıdaki biçimlendirme örneği, TextBlock iki nesne içinde iç içe yerleştirilmiş bir gösterir StackPanel .
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<StackPanel Margin="16">
<StackPanel Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
</StackPanel>
</Window>
Aşağıdaki çizimde biçimlendirmenin sonuçları gösterilmektedir.

İki StackPanel içinde iç içe yerleştirilmiş TextBlock
Aşağıdaki kod örneği, TransformToAncestor kapsayan göreli öğesinin sapmasını almak için yönteminin nasıl kullanılacağını gösterir TextBlockWindow . Aralık değerleri, döndürülen değer içinde yer alır GeneralTransform .
// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myTextBlock.TransformToAncestor(this);
// Retrieve the point value relative to the parent.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));
' Return the general transform for the specified visual object.
Dim generalTransform1 As GeneralTransform = myTextBlock.TransformToAncestor(Me)
' Retrieve the point value relative to the parent.
Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))
Bu konum, Margin içerdiği tüm nesnelerin değerlerini hesaba alır Window . Bu durumda X 28 (16 + 8 + 4) ve 28 ' dir Y .
Döndürülen göreli konum değeri, öğesinin üst öğesine görelidir Visual . Bir öğesinin alt öğesine göreli bir fark değeri döndürmek istiyorsanız VisualTransformToDescendant yöntemini kullanın.
Bir alt öğe ile göreli uzaklığın alınması
Aşağıdaki biçimlendirme örneği bir TextBlock nesnesi içinde bulunan bir gösterir StackPanel .
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
Aşağıdaki kod örneği, TransformToDescendantStackPanel onun alt öğesine göreli sapmasını almak için yönteminin nasıl kullanılacağını gösterir TextBlock . Aralık değerleri, döndürülen değer içinde yer alır GeneralTransform .
// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myStackPanel.TransformToDescendant(myTextBlock);
// Retrieve the point value relative to the child.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));
' Return the general transform for the specified visual object.
Dim generalTransform1 As GeneralTransform = myStackPanel.TransformToDescendant(myTextBlock)
' Retrieve the point value relative to the child.
Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))
Bu fark, Margin tüm nesneler için değerleri hesaba girer. Bu durumda, X -4 ve-4 ' dir Y . Üst nesne, alt nesnesine göre negatif uzaklığın olduğu için, Aralık değerleri negatif değerlerdir.