2009-05-05 14 views
11

Tengo problemas para hacer un tramo ComboBox para llenar todo el ancho de columna en un GridViewColumn. También debe cambiar el tamaño cuando la columna se redimensiona.Hacer que los cuadros combinados de WPF llenen un ancho de columna completo

En el siguiente ejemplo tengo un StackPanel con un ComboBox dentro. Esto se establece para estirar y de hecho se estirará para llenar el ancho StackPanel.

Luego agrego un ListView con una columna, que contiene un StackPanel con un ComboBox. Tanto el StackPanel como el ComboBox están configurados para estirar, pero no es así. Utilizo colores de fondo para identificar el tamaño de StackPanel s, y no hay rojo a menos que establezca un ancho o agregue elementos al ComboBox de modo que necesite más ancho.

También intenté jugar con la propiedad HorizontalContentAlignment sin éxito.

<StackPanel Height="59" Margin="45,12,38,0" VerticalAlignment="Top" Background="Green"> 
    <ComboBox HorizontalAlignment="Stretch" /> 
</StackPanel> 

<ListView x:Name="MyListView" Margin="0,106,0,0"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Num" Width="70"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel Background="red" Orientation="Horizontal" HorizontalAlignment="Stretch"> 
          <ComboBox HorizontalAlignment="Stretch" /> 
         </StackPanel> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
    <ListViewItem></ListViewItem> 
</ListView> 
+0

Re tu bandera de moderador; te perdiste el 26 de diciembre y el 6 de marzo (a menos que me falte el registro incorrecto) –

+0

Usa 'DockPanel' en lugar de' StackPanel' – Aaaaaaaa

+0

A menos que el StackPanel tenga algo, puedes tener más suerte con un borde. –

Respuesta

15

Intente configurar la Style del ListViewItem. También eliminé tu StackPanel.

<ListView x:Name="MyListView" Margin="0,106,0,0"> 
    <ListView.Resources> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.Resources> 

    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Num" Width="170"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 

    <ListViewItem></ListViewItem> 
</ListView> 
+0

¡Gracias! Eso funciona, sin embargo, me da un nuevo problema. Bueno, en el ejemplo simplificado que di en la pregunta, todo está bien, pero mi lista real es más compleja. Al agregar el estilo, sin tener ningún StackPanel alrededor, el cambio de tamaño de la columna es muy lento. Si agrego un StackPanel circundante con la propiedad Orientation = "Horizontal", el cambio de tamaño es fluido. Este problema ocurre cuando normalmente tengo> 1000 elementos en mi lista. ¿Alguna idea de lo que da esto? No está usando su solución, pero agregar Background = "Transparent" le da el mismo problema. Se siente como si hubiera intentado todo ... ¡Gracias! – stiank81

+2

Podría agregar que agregar un panel de pila circundante con orientación horizontal evita que ComboBox llene toda la columna ... – stiank81

+0

Bueno, respondió la pregunta, así que estoy cerrando esta. Gracias. Por favor, consulte mi nueva pregunta sobre el tamaño de la columna problemas de rendimiento: http://stackoverflow.com/questions/829242/wpf-column-resize-performance-issues – stiank81

Cuestiones relacionadas