2009-09-04 30 views
9

Estoy buscando establecer el fondo de una columna en un WPF GridView. Muchos resultados de Google han apuntado hacia la configuración de GridViewColumn.CellTemplate para cambiar la apariencia de una columna. Sin embargo, me encontré con un problema al establecer el color de fondo; no se extiende hasta llenar la celda:Configuración de fondo de columna en WPF ListView/Gridview

Ugly Grid View

Aquí está la xaml estoy trabajando con:

<Window x:Class="ScratchPadWpf.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Width="300" Height="300"> 
    <Grid> 
    <ListView ItemsSource="{Binding}"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Red"> 
        <TextBlock Text="{Binding FirstName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Yellow"> 
        <TextBlock Text="{Binding LastName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
     </ListView.View> 
    </ListView> 
    </Grid> 
</Window> 

Y los xaml.cs para la buena medida:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
    InitializeComponent(); 
    DataContext = new[] 
    { 
     new {FirstName = "Jim", LastName = "Bob"}, 
     new {FirstName = "Frank", LastName = "Smith"}, 
     new {FirstName = "Tooth", LastName = "Paste"}, 
    }; 
    } 
} 

Ajuste el ancho y la altura de la cuadrícula de la plantilla de datos es mayor que la celda con un margen negativo y puede producir un resultado cercano, pero si cambia el tamaño de la columna, el problema se muestra de nuevo.

<Grid Background="Yellow" Height="22" Width="50" Margin="-6"> 

Still Ugly

¿Hay una manera de llenar la celda con el color?

Respuesta

10

Ajuste el HorizontalContentAlignment del ItemContainerStyle:

<ListView ItemsSource="{Binding}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

Resultado:

alt text

+0

Eso ayuda a no tener que establecer el ancho. Sin embargo, todavía hay un espacio entre las dos columnas. ¿Alguna manera de cerrar eso? – statenjason

+5

Por desgracia, el GridViewRowPresenter codifica el Margen a 6,0,6,0. Me temo que sería una buena cantidad de trabajo solucionar este problema. –

+0

Una solución hacky es establecer el margen de la cuadrícula que contiene a -6,0, -6,0. –

3

Desenterrar un viejo hilo, pero he encontrado una solución poco fiables para este

<Grid Background="{Binding backGround}" Margin="-6,0,-6,0"> 
    <TextBlock Margin="6,0,6,0" Text="{Binding myText}" TextAlignment="Right" /> 
</Grid> 

Mueve los márgenes para que el color de fondo se llene toda la celda, pero luego los mueve hacia atrás para que el texto esté todavía en el lugar correcto. Funciona por ahora hasta que se arregle correctamente.

+2

Al desenterrar este hilo ya desenterrado; Tengo curiosidad por saber si este fenómeno está "arreglado" ahora? Intento aprender WPF después de estar alejado de la codificación durante cuatro años, y parece que no puedo encontrar mejores soluciones para crear fondos de columna sin costuras de diferentes colores. Cualquiera que pueda indicarme un método moderno/mejor es bienvenido a: D – Grim

Cuestiones relacionadas