Superposición de CANVAS en WPF

Resuelto
robunccm Mensajes publicados 53 Estado Miembro -  
 Usuario anónimo -
Hola,
Busco realizar una vista de red ferroviaria compuesta de diferentes objetos AiguillageDroite AiguillageGauche VoiesDroite VoiesCourbes FeuxSignalisation ...... por ahora he creado dos clases para AiguillageDroite y AiguillageGauche (no confundir con la posición de las agujas Directas o Desviadas)

todos estos elementos están descritos en un archivo XML (posX, posY, ángulo ....)

Para mis pruebas tengo dos ListBox cada uno con un Canvas para mostrar y posicionar mis elementos así y puedo accionar cada uno de los controles que entonces modifica su apariencia gráfica y actualiza el TextBox en la esquina superior izquierda


Si superpongo mis dos Canvas, necesidad para construir mi vista de red, logro hacerlo visualmente pero los clics en los controles del Canvas inferior no son detectados


era mi temor no estoy realmente sorprendido pero tal vez haya un modo?

he intentado con un CANVAS integrando los dos ListBox, en este caso pierdo el beneficio del posicionamiento
programado y mis controles se muestran como en el ListBox



¿Existe alguna forma de integrar en el XAML una colección de objetos en un Canvas sin sufrir el formato que impone un ListBox?

Gracias por sus respuestas y sugerencias
Amistosamente Roland

Configuración: Windows / Chrome 72.0.3626.109

8 respuestas

  1. Usuario anónimo
     
    Buenas noches,

    No entiendo la necesidad de superponer los Canvas.
    ¿No puedes mostrar todas las indicaciones en un solo Canvas?

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    1
    1. robunccm Mensajes publicados 53 Estado Miembro 1
       
      Buenas noches Whismeril
      ¿No puedes mostrar todas las agujas en un solo Canvas?

      No creo que sea posible, ya que tengo dos clases de agujas, Izquierda y Derecha, que probablemente podría confundir en una sola, pero tengo otros elementos como curvas, rectas, luces y sectores a representar.
      Pensé que podría superponer varios Canvas (uno por clase de objetos)

      Mi necesidad es colocar todos estos elementos en un Canvas para simbolizar la red y controlar diferentes dispositivos al hacer clic en ellos, como en este pequeño ejemplo


      Con el conocimiento que tengo, he usado ListBox para servir el XAML, ya que no sé si hay otra forma de despliegar una colección para mostrarla.

      ¿O debo diseñar una clase global para todo tipo de elementos a mostrar y tener solo un ListBox en ese caso?
      0
  2. Usuario anónimo
     
    Dado que quieres colocar tus elementos como en un mapa, la listbox no me parece adecuada.
    El Canvas lo es más en el sentido de que permite un posicionamiento.
    Como es un control que he utilizado poco y no desde hace mucho tiempo, así como está, tengo que sumergirme en ello para enlazar una colección.
    En el peor de los casos, puedes colocar tu(s) colección(es) en el código detrás.

    Tengo dos clases de desvío Izquierda y Derecha que probablemente podría combinar en una sola
    asumiendo que las diferencias entre las dos justifican dos clases, hay (creo) una mayoría de código en común.
    En este caso, es necesario (esto no es solo un consejo) escribir tres clases, una clase "Desvío" que contenga todo el código común y dos clases que hiervan conteniendo los códigos específicos.
    Ventajas:
    • el código común se escribe una sola vez, se mantiene una sola vez
    • puedes hacer una colección de desvíos que contenga tanto derechos como izquierdos (polimorfismo)


    Y solo para poder hacer una colección de todos tus elementos de riel, deberías escribir una clase de la que todos deriven, incluso si hay muy poco (o ningún) código en común (veo al menos una imagen).

    El polimorfismo es un mecanismo fundamental de la programación orientada a objetos.

    Anteriormente, cuando en el clic de un botón, convertíamos sender (de tipo object, Microsoft no se preocupa...) en Buton, eso es gracias al polimorfismo. Todo deriva de object, por lo tanto, un Buton es un object y puede pasar por la variable sender, pero cuando necesitamos algo que venga de Control o de Buton, convertimos sender en uno u otro tipo y accedemos a ello.

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    1
    1. robunccm Mensajes publicados 53 Estado Miembro 1
       
      No sabía que en CCM se beneficiaba de clases particulares, es genial, muchas gracias.

      Totalmente de acuerdo sobre la inadecuación del ListBox, pero aún no tengo otra solución para enumerar mi colección de cambios en el XAML, estoy buscando...

      El polimorfismo, otra palabra complicada que voy a tener que incluir en mi vocabulario.
      Como lo expresas, entiendo bien la importancia; había pensado en combinar estas dos clases, pero estaba abordando el problema al revés.
      De hecho, debo poder crear incluso una clase Componente y derivar cada variante, ya mencionada anteriormente, ya que tendrán en común muchos atributos como número, posX, posY, ángulo, imagen, ......

      Incluso me gustaría vincular
      <code c>MouseLeftButtonDown="{Binding ClickAiguillage}"<code>
      pero no creo que sea posible

      Gracias por tus consejos, empiezo mis Clases y te mantengo informado.
      0
  3. Usuario anónimo
     
    Hola

    porque tendré que atacar el gestor de rutas
    eso puede resultar muy complejo.
    Te va a hacer falta trabajar en la teoría de grafos (no la manejo en absoluto), aquí http://www.laas.fr/files/MOGISA/PresentationMathese.pdf página 11, menciona los algoritmos que podrás usar.

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    1
  4. Usuario anónimo
     
    ¿Quizás puedes echar un vistazo a mi tutorial sobre el objeto en .net?
    He intentado explicarlo claramente

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0
  5. robunccm Mensajes publicados 53 Estado Miembro 1
     
    Hola
    gracias por el consejo, voy a investigar
    por el momento me he quedado con un ListBox, ya que he podido unificar mis símbolos y tener una sola clase, y eso funciona bien

    en mi vista de red dispongo de un modo de comando y de un modo de edición
    en edición, al hacer clic en un símbolo, se abre una pequeña ventana que me permite posicionar, agregar, eliminar... el objeto correspondiente
    probaré el arrastrar y soltar más tarde
    en modo de comando, al hacer clic en un símbolo de desvío, se elabora un comando que se confía al objeto Arduino, que lo envía por Ethernet, y vemos en la pantalla el comando y su retorno

    ahora voy a crear y posicionar las luces de señalización

    ves que mi proyecto avanza y mis preguntas son menos apremiantes, pero no tardarán en surgir, ya que me va a hacer falta atacar el gestor de itinerarios, te lo comentaré
    ¡Hasta luego! Roland
    0
  6. robunccm Mensajes publicados 53 Estado Miembro 1
     
    Hola a todos y como de costumbre, hola a Whismeril

    aunque marcado como resuelto, el resto en este hilo se complementa

    He implementado ItemsControl
     <ItemsControl Name="icTodoList" DataContext="{Binding .}" ItemsSource="{Binding Crs}" >

    es exactamente lo que estaba buscando

    he encontrado un gran ejemplo de panorámica y zoom
    voy a poder trazar mi red en una sola ventana y moverme a mi antojo
    de todos modos, preveré botones para accesos rápidos a vistas estándar




    estoy impresionado por las posibilidades de WPF, es cierto que no es fácil sumergirse, pero cuando uno ve el resultado con tan poco código, eso abre el apetito, gracias de nuevo a Whismeril por ayudarme a vencer mis dificultades de principiante, que todavía soy ....
    0
  7. Usuario anónimo
     
    De nada y buena continuación

    --
    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns
    0