2011-01-11 14 views
34

que tienen un control de usuario, lo llaman control de usuario, que tiene una cuadrícula con las siguientes definiciones de columna:SharedSizeGroup de cuadrícula y * dimensionamiento

<Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
      <ColumnDefinition Width="*" SharedSizeGroup="C"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/> 
      <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

También tengo MainWindow, que contiene una cuadrícula de sí mismo, con la siguiente propiedad definida en la cuadrícula:

Grid.IsSharedSizeScope="True" 

Ahora, añadí un par de UserControls a la red en MainWindow (cada uno a una fila separada). Mi objetivo es que cada ancho de columna de los diferentes UserControls permanezca sincronizado. Todo funciona bien cuando se usa SharedSizeGroup excepto por una cosa. Parece que cualquier columna con un Ancho de * no se comporta como debería. Parece que los anchos de columna * se establecen como si fueran automáticos.

¿Existen limitaciones/problemas con SharedSizeGroup y * sizing? Esta parece ser la mejor manera de mantener el ancho de las columnas sincronizado, pero parece que no puedo solucionarlo.

Gracias.

Respuesta

46

MSDN:

columnas y filas que participan en el intercambio de tamaño no respetan estrella dimensionamiento. En el escenario de intercambio de tamaño, estrella de tamaño se trata como Auto

Si utiliza estrellas, entonces todas las columnas serían la misma anchura, por lo que debe asignar el mismo SharedSizeGroup a todos si no te importa el auto aspecto dimensionamiento:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

(A partir de este comportamiento también se deduce que se puede soltar la propiedad Width cuando se establece SharedSizeGroup)


Puede deducir que si todas las columnas de tamaño automático están en grupos de tamaño compartido, todas las columnas de tamaño de estrella tendrán los mismos tamaños que todas las cuadrículas en el alcance tendrán la misma cantidad de espacio no utilizado que se distribuirá al tamaño de estrella columnas

Un ejemplo sencillo:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition SharedSizeGroup="B" Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 

Como se explica el Width="*" no va a hacer nada, pero como columnas 0 y 2 están sincronizados, la columna 1 tiene que ser sincronizado, así por lo que sólo puede caer el SharedSizeGroup:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 
+0

Gracias por el enlace. Desafortunadamente, establecer las * columnas para usar un SharedSizeGroup diferente hará que todas sus columnas tengan sus anchos sincronizados (lo cual se espera) pero no es lo que estoy buscando. Necesito que cada ancho de columna se sincronice individualmente. – Flack

+0

Lo que propuse es * exactamente lo que la estrella normalmente haría *, no obtengo lo que desea ... –

+2

Tenga mucho cuidado con esto. Mi aplicación, sin hacer nada, consumió el 100% de un núcleo de CPU debido a esto. Tan pronto como eliminé el "SharedSizeGroup", consume 0, como se esperaba. – AlexeiOst

Cuestiones relacionadas