2009-09-20 16 views
6

Tengo un control de elementos que está vinculado a una colección de objetos. El objeto tiene dos propiedades (nombre, valor) que se muestran en un bloque de texto y en un cuadro de texto respectivamente. La lista es bastante larga y me gustaría mostrarla en dos columnas. Entonces mi pregunta es, ¿hay alguna forma de que pueda obtener un control de elementos para mostrar sus artículos en dos columnas?Mostrar elementos en un control de elementos en dos columnas (WPF)

P.S: ¡La colección está llena en el tiempo de ejecución y no sé cuántos elementos tendré que mostrar!

Respuesta

5

Tiendo a poner los artículos en WrapPanel, y luego establezco que el ancho del panel es 2 veces el ancho del artículo. Eso me da buenas columnas con una cantidad arbitraria de elementos. Si los anchos de los artículos son diferentes, coloco cada artículo en su propia Grilla o Fajo de ancho fijo.

+0

Gracias por la respuesta. Voy a tratar de salir. Pero tengo la sospecha de que esto estropeará mi interfaz de usuario cuando el usuario cambie el tamaño del panel/ventana. ¿No hay una manera más elegante de hacer esto? ¿Tal vez usando una grilla dentro de la plantilla de elementos del control de elementos? –

11

Use un ListBox y especifique una DataTemplate en la que coloca tanto TextBlock como TextBox. Use enlaces para poblarlos a ambos. Ver http://msdn.microsoft.com/en-us/library/ms742521.aspx para más ejemplos.

<ListBox x:Name="TheListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Key" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding Name}" /> 
       <TextBox Grid.Column="1" Text="{Binding Value }" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

TheListBox.ItemsSource = CollectionOfObjects; 
+1

El elemento realmente crítico (y no intuitivo, lo siento) de este patrón es SharedSizeGroup. Digo "no intuitivo" porque intuitivamente piensas "Quiero mostrar mis elementos en una cuadrícula", no "Quiero mostrar mis artículos en muchas cuadrículas cuyas columnas cambian de tamaño de forma interdependiente." –

+9

Cuando probé esto en un ItemsControl (no un ListBox), tuve que establecer una propiedad en ItemsControl: Grid.IsSharedSizeScope = "True" para que esto funcione. –

Cuestiones relacionadas