2009-09-04 15 views
9

Czekam na ustawienie tła kolumny w GridView WPF. Wiele wyników Google wskazuje na ustawienie GridViewColumn.CellTemplate w celu zmiany wyglądu kolumny. Jednak podczas ustawiania koloru tła napotykam problem; to nie rozciąga się wypełnić komórkę:Ustawianie tła kolumn w WPF ListView/Gridview

Ugly Grid View

Oto XAML Pracuję z:

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

a xaml.cs na dokładkę:

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

Setting Szerokość i wysokość siatki DataTemplate, która jest większa niż komórka z marginesem ujemnym, może dać wynik zbliżony, ale jeśli zmienisz rozmiar kolumny, problem ponownie się wyświetli.

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

Still Ugly

Czy istnieje sposób, aby wypełnić komórkę z kolorem?

Odpowiedz

10

Ustaw HorizontalContentAlignment z ItemContainerStyle:

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

Wynik:

alt text

+0

Dzięki temu nie trzeba ustawiać szerokości. Jednak nadal istnieje luka między dwiema kolumnami. Jakikolwiek sposób to zamknąć? – statenjason

+5

Niestety, GridViewRowPresenter zakodowane na sztywno marża do 6,0,6,0. Obawiam się, że byłoby to dość pracochłonne. –

+0

Hacky rozwiązaniem jest ustawienie marginesu siatki zawierającej -6,0, -6,0. –

3

wykopaniu stary wątek, ale znalazłem podejrzanie poprawkę do tego

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

Przenosi marginesy, aby wypełnić kolor tła cała komórka, ale potem przenosi je z powrotem, aby tekst był we właściwym miejscu. Działa na razie, dopóki nie zostanie poprawnie naprawiony.

+2

Po wykopaniu tego już wykopanego wątku; Jestem ciekawy, czy to zjawisko jest teraz "naprawione"? Próbuję dowiedzieć się WPF po tym, jak od czterech lat jest z dala od kodowania i nie można znaleźć lepsze rozwiązania dla tworzenia tła kolumn bez różnych kolorów. Każdy, kto może wskazać mi nowoczesną/lepszą metodę, jest mile widziany: D – Grim

Powiązane problemy