Установка фона столбца в WPF ListView / Gridview

Я хочу установить фон столбца в WPF GridView. Многие результаты Google указывают на настройку GridViewColumn.CellTemplate для изменения внешнего вида столбца. Однако я столкнулся с проблемой при установке цвета фона; он не растягивается, чтобы заполнить ячейку:

Уродливый вид сетки

Вот xaml, с которым я работаю:

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

И xaml.cs для хорошей меры:

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

Установка ширины и высоты сетки DataTemplate больше, чем ячейка с отрицательным полем, может привести к близкому результату, но если вы измените размер столбца, проблема снова проявится.

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

Все еще некрасиво

Есть ли способ заполнить ячейку цветом?


person statenjason    schedule 04.09.2009    source источник


Ответы (2)


Установите HorizontalContentAlignment из ItemContainerStyle:

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

Результат:

alt text

person Kent Boogaart    schedule 04.09.2009
comment
Это помогает избавиться от необходимости устанавливать ширину. Однако между двумя столбцами все еще есть разрыв. Есть ли способ закрыть это? - person statenjason; 04.09.2009
comment
Увы, GridViewRowPresenter жестко кодирует Margin на 6,0,6,0. Боюсь, что придется потрудиться, чтобы обойти это. - person Kent Boogaart; 04.09.2009
comment
Хакерский обходной путь - установить Margin содержащей Grid равной -6,0, -6,0. - person Kent Boogaart; 04.09.2009
comment
Я пытался решить аналогичную проблему с полями столбцов - спасибо, что указали на жесткое кодирование. Теперь вопрос: почему? Думаю, мы никогда не узнаем. - person serialhobbyist; 06.09.2009
comment
Что, если вам нужно выровнять одни столбцы по левому краю, а другие по правому краю? Стиль применяется ко всем. - person Phil Wright; 25.10.2011
comment
@Phil: используйте привязку в стиле или триггер. - person Kent Boogaart; 25.10.2011

Копаю старую ветку, но я нашел хитроумное решение для этого

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

Перемещает поля так, чтобы цвет фона заполнил всю ячейку, но затем перемещает их назад, чтобы текст оставался на нужном месте. Работает на данный момент, пока не будет исправлено должным образом.

person mike    schedule 06.11.2009
comment
После раскопок уже выкопанная нить; Мне любопытно узнать, исправлено ли сейчас это явление? Я пытаюсь изучить WPF после того, как четыре года не занимался программированием, и, похоже, не могу найти лучшего решения для создания бесшовных фонов столбцов разных цветов. Приглашаем всех, кто может указать мне на более современный / лучший метод: D - person Grim; 12.10.2015