viernes, 24 de agosto de 2012

Mover un Canvas dentro de un Canvas en WPF

Una de las cosas que más agobian es las pequeñas diferencias que hay en los lenguajes de programación de .NET. Y agobian porque las cosas más sencillas no están prácticamente en ningún sitio porque todo el mundo lo da por más que sabido.

Y es una de las razones principales de este blog. Compartir conocimientos de nivel 100 (iniciación).

Así me encuentro, en el proyecto este del Addin para Excel, que tengo la pantalla compuesta por diferentes capas en donde tengo, construidas sobre controles Canvas, los polígonos, los nombres y los diferentes valores.

Algo así, para que se entienda mejor:

   1: <Canvas x:Name="Canvas">
   2:     <Path Name="a114" Fill="#FFC2C2D8" />
   3:     <Path Name="a118" Fill="#FFC2C2D8 />
   4:     <Canvas Name="Valores">
   5:         <TextBlock Canvas.Left="683" Canvas.Top="303" Height="37" Name="t112" />
   6:     </Canvas>
   7:     <Canvas Name="Nombres">
   8:         <TextBlock Canvas.Left="683" Canvas.Top="303" Height="37" Name="t112" />
   9:     </Canvas>
  10: </Canvas>


Tengo un control “Canvas” general sobre el que pinto los polígonos del tipo Path, y añado dos capas más “Valores” y “Nombres” sobre las que pinto textos dentro de controles TextBlock. Viéndose algo tanto que así:


image


Se podría hacer dos mil preguntas de porqué se tomo la decisión técnica de hacer las cosas así, pero eso lo cubriré con un tupido velo.


El problema que quiero solucionar, es que puedo ocultar las cifras del valor que aparecen debajo del nombre y que entonces necesito que el nombre descienda unos 25 pixeles para que quede más centrado verticalmente, ocupando el sitio que ocupa el valor.


Después de darle mil vueltas, y gracias a @pablonete, encontré la forma de hacerlo y que es la mar de sencillo con un método del control del tipo Canvas.



   1: Canvas.SetTop(canvasNombres, 0);

Es decir, Al tipo Canvas le invoco el método SetTop que lo que hace es mover el control tipo Canvas “canvasNombres”  25 pixeles hacia abajo desde su Canvas contenedor. Que ya se encarga el solito de buscarlo.


El quid del asunto aquí es cómo recuperar el Canvas “canvasNombre”. Y que, para darte una pista, es un Child del Canvas principal “Canvas”.


Espero que sea de utilidad.

No hay comentarios: