none
ListBox y Expander Header editables RRS feed

  • Pregunta

  • Hola a todos! Tengo un User Control en el cual se agregan en tiempo de ejecucion, expanders y dentro de los expanders un listbox para cada uno. y quisiera saber como puedo hacer para que el header del expander sea editable en tiempo de ejecución ya que representa el nombre de una instruccion que el usuario indica, por lo cual éste tiene que identificarlo. Igual para el listbox, cada uno de los items representa un archivo, que pues quisiera dar la posibilidad de renombrar desde ahi. Agradecería mucho su ayuda.
    ITI. Oscar Arturo Vela Silva
    miércoles, 9 de noviembre de 2011 8:21

Respuestas

  • Hola de nuevo.

    Yo generalmente creo un archivo ResourceDictionary.xaml donde meto los estilos y asi estan mejor organizados, luego desde al archivo de aplicacion app.xaml inserto los recursos a usar (aunque luego se puedan cambiar mediante programacion pero es otra historia), y se queda un codigo como este:

     

        <Application.Resources>
            
        	<ResourceDictionary>
        		<ResourceDictionary.MergedDictionaries>
        			<ResourceDictionary Source="ResourceDictionary1.xaml"/>
        		</ResourceDictionary.MergedDictionaries>
            
            
        	</ResourceDictionary>
            
        </Application.Resources>
    

     

    Y para acceder a estos recursos tan solo hay que buscar la clave como:

     

    expander1.Style = (System.Windows.Style)App.Current.Resources["ExpanderStyle1"];
    



    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Editado David_González viernes, 11 de noviembre de 2011 8:24
    • Marcado como respuesta Hard Tour martes, 15 de noviembre de 2011 3:03
    viernes, 11 de noviembre de 2011 8:24
  • Ya quedó! muchas gracias. Lo que sucede es, creo. Que el DataTemplate solo lo aplica cuando se usa la propiedad ItemsSource. Yo estaba agregando los elementos directamente a la propiedad Items con un ListBoxItem... y creo que fué ese mi error. Pero muchas gracias.
    ITI. Oscar Arturo Vela Silva
    • Marcado como respuesta Hard Tour martes, 15 de noviembre de 2011 3:05
    martes, 15 de noviembre de 2011 3:04

Todas las respuestas

  • Hola Hard Tour.

    Con editable ¿a que te refieres? ¿a que salga algun textbox por ejemplo cuando haces doble click en el header y los items del listbox?.

    ¿Silverlight o WPF?


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    miércoles, 9 de noviembre de 2011 20:48
  • Exacto!, estube pensando en crear un estilo y agregarle unos triggers para poner un textbox que se camuflajee con el fondo del header y listbox respectivamente en el item template y que en el evento mouseover se vea como normalmente se ve, y así crear la ilusión de que el textbox simplemente aparece. Desafortunadamente cree estos estilos en Window.Resource desde código XAML, pero como les menciono, los headers y listbox se crean en tiempo de ejecución... y al hacer uso del Resources["Key"] , no me devuelve el estilo. A pesar de estar adecuadamente especificado el valor x:Key en el estilo. O tu que me recomendarías hacer?
    ITI. Oscar Arturo Vela Silva
    viernes, 11 de noviembre de 2011 7:12
  • Hola Hard Tour.

    ¿entonces los estilos ya los tienes implementados?, lo ideal es que los metas en un ResourceDictionary para poder acceder mediante el x:key y los Resources y luego con la propiedad Template, asignar la plantilla.

    ¿como y donde tienes implementado los estilos?


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    viernes, 11 de noviembre de 2011 7:29
  • Hola de nuevo.

    Yo generalmente creo un archivo ResourceDictionary.xaml donde meto los estilos y asi estan mejor organizados, luego desde al archivo de aplicacion app.xaml inserto los recursos a usar (aunque luego se puedan cambiar mediante programacion pero es otra historia), y se queda un codigo como este:

     

        <Application.Resources>
            
        	<ResourceDictionary>
        		<ResourceDictionary.MergedDictionaries>
        			<ResourceDictionary Source="ResourceDictionary1.xaml"/>
        		</ResourceDictionary.MergedDictionaries>
            
            
        	</ResourceDictionary>
            
        </Application.Resources>
    

     

    Y para acceder a estos recursos tan solo hay que buscar la clave como:

     

    expander1.Style = (System.Windows.Style)App.Current.Resources["ExpanderStyle1"];
    



    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Editado David_González viernes, 11 de noviembre de 2011 8:24
    • Marcado como respuesta Hard Tour martes, 15 de noviembre de 2011 3:03
    viernes, 11 de noviembre de 2011 8:24
  • Bueno, yo hasta ahora, habia guardado el DataTemplate en Window.Resources, no he intentado hacerlo como mencionas. A primera hora lo intento y te hago saber mis resultados. Gracias por el consejo.


    ITI. Oscar Arturo Vela Silva
    viernes, 11 de noviembre de 2011 8:41
  • Disculpa por no contestar antes. Me sirvió la ayuda que me diste, solo que al asignar el DataTemplate pues el ListBox no lo asigna, verás los controles son diseñados en tiempo de ejecución así que supongo por ahi va la cosa.

     

    Expander CrearPaso()
            {
                Expander paso = new Expander();
                paso.VerticalAlignment = System.Windows.VerticalAlignment.Top;
                paso.ContextMenu = CrearMenuInstruccion();
                ListBox reportes = new ListBox();
                reportes.VerticalAlignment = System.Windows.VerticalAlignment.Top;
                reportes.SelectionMode = SelectionMode.Single;
                reportes.ItemTemplate = this.Resources["dtItem"] as DataTemplate;
                paso.Content = reportes;
                return paso;
            }
    

    este Expander que devuelve mi método se agrega a un StackPanel, y toda va muy bien, si me lo muestra en pantalla pero el DataTemplate simplemente parece no ser aplicado a pesar de ser asignado, he revisado los datos y efectivamente, el resources me esta devolviendo el DataTemplate correcto. intenté con el método UpdateLayout (aunque no se a ciencia cierta si esto era lo adecuado) y aún así no me muestra los datos como deseo. Que crees que pueda hacer en este caso?


    ITI. Oscar Arturo Vela Silva
    martes, 15 de noviembre de 2011 2:23
  • Ya quedó! muchas gracias. Lo que sucede es, creo. Que el DataTemplate solo lo aplica cuando se usa la propiedad ItemsSource. Yo estaba agregando los elementos directamente a la propiedad Items con un ListBoxItem... y creo que fué ese mi error. Pero muchas gracias.
    ITI. Oscar Arturo Vela Silva
    • Marcado como respuesta Hard Tour martes, 15 de noviembre de 2011 3:05
    martes, 15 de noviembre de 2011 3:04