Задаване на фон на колона в 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>

Резултат:

алтернативен текст

person Kent Boogaart    schedule 04.09.2009
comment
Това помага да не се налага да задавате ширината. Все още обаче има празнина между двете колони. Има ли начин да го затворя? - person statenjason; 04.09.2009
comment
Уви, GridViewRowPresenter твърдо кодира полето до 6,0,6,0. Страхувам се, че ще е доста работа да се заобиколи това. - person Kent Boogaart; 04.09.2009
comment
Хакерско заобиколно решение е да зададете полето на съдържащата мрежа на -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