Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En estos ejemplos se muestra cómo recuperar el valor de desplazamiento de un objeto visual relativo a su elemento primario, o a cualquier antecesor o descendiente.
Ejemplo
En el ejemplo de marcado siguiente, se muestra un TextBlock que se define con un Margin valor de 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
En el ejemplo de código siguiente se muestra cómo usar el GetOffset método para recuperar el desplazamiento de TextBlock. Los valores de desplazamiento están contenidos en el valor Vector que se ha devuelto.
// 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)
El desplazamiento tiene en cuenta el valor Margin. En este caso, X es 4 y Y es 4.
El valor de desplazamiento devuelto es relativo al elemento primario de Visual. Si desea devolver un valor de desplazamiento que no es relativo al elemento primario de , Visualuse el TransformToAncestor método .
Obtener el desplazamiento relativo a un antecesor
En el ejemplo de marcado siguiente se muestra un TextBlock que está anidado dentro de dos StackPanel objetos.
<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>
En la ilustración siguiente se muestran los resultados del marcado.
TextBlock anidado en dos StackPanels
En el ejemplo de código siguiente se muestra cómo usar el método TransformToAncestor para recuperar el desplazamiento del TextBlock relativo al contenedor Window. Los valores de desplazamiento están contenidos en el valor GeneralTransform que se ha devuelto.
// 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))
El desplazamiento tiene en cuenta los Margin valores de todos los objetos de la colección que contiene Window. En este caso, X es 28 (16 + 8 + 4) y Y es 28.
El valor de desplazamiento devuelto es relativo al antecesor de Visual. Si desea devolver un valor de desplazamiento que sea relativo al descendiente de Visual, utilice el método TransformToDescendant.
Obtener el desplazamiento relativo a un descendiente
En el ejemplo de marcado siguiente se muestra un TextBlock que se encuentra dentro de un StackPanel objeto .
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
En el ejemplo de código siguiente se muestra cómo usar el TransformToDescendant método para recuperar el desplazamiento del StackPanel objeto relativo a su elemento secundario TextBlock. Los valores de desplazamiento están contenidos en el valor GeneralTransform que se ha devuelto.
// 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))
El desplazamiento tiene en cuenta los Margin valores de todos los objetos. En este caso, X es -4 y Y es -4. Los valores de desplazamiento son valores negativos, ya que el objeto primario se desplaza negativamente en relación con su objeto secundario.
Consulte también
.NET Desktop feedback