2010-08-04 24 views
28

¿Cuál sería la mejor manera/derecho de tener un conjunto de DataGrid columnas tienen la anchura proporcional (Width="\*"), pero para tener sea su anchura mínimo al menos el ancho de su contenido? Por el momento, si uso Width="*", las columnas se mantienen exactamente proporcionales, pero el contenido se recorta si las columnas se vuelven demasiado delgadas. Si uso Width="Auto", las columnas se adaptan perfectamente a su contenido, pero esto los hace todos diferentes tamaños.WPF - Columna cuadrícula de datos con ancho = "*", pero MinWidth para ajustar el contenido

Lo que quiero es realmente una combinación de los dos, como Width="\*", MinWidth="Auto" de modo que cuando hay un ancho extra las columnas serán todas espacio en anchos iguales, pero cuando la cuadrícula se hace más pequeña, el contenido nunca se recorta.

Lamentablemente, MinWidth="Auto" no existe, así que supongo que tengo que enlazar la propiedad MinWidth de la columna, pero es difícil saber exactamente a qué lo vincularía.

¿Cómo le digo a WPF "MinWidth=" el ancho de la parte más ancha de la columna?

+1

Permitirnos configurar MinWidth = "auto" sería una buena característica. –

Respuesta

11

Conjunto Width = "Auto" en XAML.

Luego, en el código:

MinWidth = ActualWidth 
Width = new GridLength(1, GridUnitType.Star) 
+1

Funcionó para mí. Pasa por todas las columnas de la cuadrícula y ejecuta el código anterior en todas ellas. poner el lazo en un controlador para el evento Loaded de la cuadrícula – saus

+0

me llevó un tiempo averiguarlo incluso con esta ayuda. Vea mi respuesta en http://stackoverflow.com/questions/13631694/wpf-datagrid-column-width-auto-and-scrollbar – Brent

18

Sé que es un poco tarde, pero me pareció que su pregunta y programar una solución pura-XAML.

<ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 

Donde los puntos ElementName al control ocupando la mayor parte del espacio. Por supuesto, eso solo es posible con elementos que tienen un ancho limitado. Si lo hace, por ejemplo, para un GroupBox, entonces puede cambiar el tamaño solo para un ancho mayor y nunca cambiar el tamaño a uno más pequeño.

Si tiene varios candidatos para el valor de MinWidth, tiene que escribir usted mismo un IMultiValueConverter, que toma un objeto [], lo analiza para los flotadores, y devuelve el máximo (su consulta sólo 1 LINQ si se utiliza sólo ustedes mismos y no necesitan manejar el mal uso del convertidor)

De esta manera también es compatible con el cambio dinámico de MinWidth.

1

Dar la columna de un nombre en el XAML:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" Name="Col1"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
</Grid> 

A continuación, establezca la propiedad MinWidth en el código como se muestra a continuación:

public MainWindow() 
{ 
    InitializeComponent(); 

    Col1.MinWidth = 340; //enter desired minimum width here 
} 
+0

puede agregar Minwidth y Maxwidth como atributo de columna. No es necesario agregar toque el código detrás –

2

También tuve problemas a columnas de la cuadrícula de tamaño correctamente dentro de la GridViewColumn. Hubo varias cosas que intenté pero luego encontré el UniformGrid. Fue la mejor solución para mí. Simplemente funciona. No lo sabía antes ... parece que no existe en la caja de herramientas VS por defecto (?) Y, por lo tanto, no sabía que existía.

Puede encontrar más acerca de UniformGrid en here.

0

Simplemente puede utilizar a continuación código para establecer el ancho máximo o el mínimo de la columna

<ColumnDefinition Width="*" MaxWidth="40"/> 

Esto tomará el espacio disponible, pero se limitará a un máximo de 40 píxeles

se puede hacer lo mismo con MinWidth también

<ColumnDefinition Width="*" MinWidth="50"/> 

Esto tomará el espacio disponible, pero siempre asegúrese de que tiene al menos 50 px espacio. Espero que esto ayude.

Cuestiones relacionadas