Gewusst wie: Abrufen des Offsets eines visuellen Objekts
Diese Beispiele zeigen, wie Sie den Offsetwert eines visuellen Objekts relativ zu seinem übergeordneten Objekt bzw. zu einem Vorgänger- oder Nachfolgerelement abrufen können.
Beispiel
Das folgende Markupbeispiel zeigt einen TextBlock, der mit dem Margin-Wert 4 definiert ist.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
Das folgende Codebeispiel zeigt, wie Sie mit der GetOffset-Methode den Offset von TextBlock abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen Vector-Werts enthalten.
// 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)
Der Offset berücksichtigt den Margin-Wert. In diesem Fall sind X und Y 4.
Der zurückgegebene Offsetwert ist relativ zum übergeordneten Element von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der nicht relativ zum übergeordneten Element von Visual ist, verwenden Sie die TransformToAncestor-Methode.
Abrufen des Offsets relativ zu einem Vorgängerelement
Im folgenden Markupbeispiel wird ein TextBlock gezeigt, der in zwei StackPanel-Objekten geschachtelt ist.
<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>
In der folgenden Abbildung werden die Ergebnisse des Markups dargestellt.
In zwei StackPanels geschachtelter TextBlock
Das folgende Codebeispiel zeigt, wie Sie mit der TransformToAncestor-Methode den Offset von TextBlock relativ zum enthaltenden Window abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen GeneralTransform-Werts enthalten.
// 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))
Der Offset berücksichtigt die Margin-Werte für alle Objekte innerhalb des enthaltenden Window. In diesem Fall sind X (16+8+4) und Y 28.
Der zurückgegebene Offsetwert ist relativ zum Vorgängerelement von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der relativ zum Nachfolgerelement von Visual ist, verwenden Sie die TransformToDescendant-Methode.
Abrufen des Offsets relativ zu einem Nachfolgerelement
Im folgenden Markupbeispiel wird ein TextBlock gezeigt, der in einem StackPanel-Objekt enthalten ist.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
Das folgende Codebeispiel zeigt, wie Sie mit der TransformToDescendant-Methode den Offset von StackPanel relativ zu dessen untergeordnetem Element TextBlock abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen GeneralTransform-Werts enthalten.
// 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))
Der Offset berücksichtigt die Margin-Werte für alle Objekte. In diesem Fall sind X und Y -4. Die Offsetwerte sind negativ, da das übergeordnete Element relativ zu seinem untergeordneten Element negativ versetzt ist.
Weitere Informationen
.NET Desktop feedback