2009-09-04 14 views
9

Ich möchte den Hintergrund einer Spalte in einem WPF GridView festlegen. Viele Google-Ergebnisse haben darauf hingewiesen, dass die GridViewColumn.CellTemplate das Aussehen einer Spalte ändern soll. Beim Einstellen der Hintergrundfarbe stößt ich jedoch auf ein Problem. es Stretching nicht um die Zelle zu füllen:Festlegen des Spaltenhintergrunds in WPF ListView/Gridview

Ugly Grid View

Hier ist der XAML Ich arbeite mit:

<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> 

Und die xaml.cs für eine gute Maßnahme:

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"}, 
    }; 
    } 
} 

Rahmen Wenn die Breite und Höhe des DataTemplate-Gitters größer als die der Zelle mit einem negativen Rand ist, kann dies zu einem nahen Ergebnis führen. Wenn Sie jedoch die Größe der Spalte ändern, wird das Problem erneut angezeigt.

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

Still Ugly

Gibt es einen Weg, um die Zelle mit Farbe zu füllen?

Antwort

10

Stellen Sie die HorizontalContentAlignment des ItemContainerStyle:

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

Ergebnis:

alt text

+0

Das hilft, die Breite nicht einstellen zu müssen. Zwischen den beiden Spalten besteht jedoch immer noch eine Lücke. Irgendeine Möglichkeit, das zu schließen? – statenjason

+5

Ach, der GridViewRowPresenter programmiert den Randwert fest auf 6,0,6,0. Ich fürchte, es wäre eine Menge Arbeit, um dies zu umgehen. –

+0

Eine hacky Problemumgehung ist, den Rand des enthaltenden Rasters auf -6,0, -6,0 zu setzen. –

3

Graben einen alten Faden wieder auf, aber ich ein kaputtes Update für dieses

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

gefunden Verschiebt die Ränder so, dass die Hintergrundfarbe ausgefüllt wird die gesamte Zelle, aber bewegt sie dann zurück, so dass der Text immer noch an der richtigen Stelle ist. Funktioniert jetzt, bis es richtig behoben ist.

+2

Nach dem Graben dieses bereits ausgegrabenen Threads; Ich bin gespannt, ob dieses Phänomen jetzt "behoben" ist? Ich versuche WPF zu lernen, nachdem ich seit vier Jahren nicht mehr mit der Programmierung beschäftigt bin, und finde keine besseren Lösungen für die Erstellung nahtloser Spaltenhintergründe mit unterschiedlichen Farben. Wer mich auf eine moderne/bessere Methode hinweisen kann, ist herzlich eingeladen: D – Grim

Verwandte Themen