Superposición de CANVAS en WPF
Resuelto
robunccm
Mensajes publicados
53
Estado
Miembro
-
Usuario anónimo -
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
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
-
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-
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?
-
-
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-
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.
-
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 -
¿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 -
Buenas noches
no he tenido mucho tiempo para dedicarme al binding en un Canvas.
Pero a priori, hay forma de usar un itemControl diciéndole que se comporte como un Canvas.
https://stackoverflow.com/questions/2317713/binding-wpf-canvas-children-to-an-observablecollection
--
Cuando era niño, el Mar Muerto solo estaba enfermo.
George Burns -
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 -
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 .... -
De nada y buena continuación
--
Cuando era pequeño, el Mar Muerto solo estaba enfermo.
George Burns