2009-09-04 35 views
9

Tôi đang tìm cách thiết lập nền của một cột trong GridView WPF. Nhiều kết quả của Google đã hướng tới việc thiết lập GridViewColumn.CellTemplate để thay đổi diện mạo của một cột. Tuy nhiên, tôi gặp một vấn đề khi thiết lập màu nền; nó không kéo dài để điền vào các tế bào:Đặt nền cột trong WPF ListView/Gridview

Ugly Grid View

Đây là XAML Tôi đang làm việc với:

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

Và xaml.cs cho biện pháp tốt:

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 chiều rộng và chiều cao của Grid DataTemplate lớn hơn ô có lề âm có thể tạo ra kết quả gần, nhưng nếu bạn thay đổi kích thước cột, vấn đề sẽ tự hiển thị lại.

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

Still Ugly

Có cách nào để điền vào ô có màu sắc?

Trả lời

10

Đặt HorizontalContentAlignment của ItemContainerStyle:

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

Kết quả:

alt text

+0

Điều đó giúp bạn không phải đặt chiều rộng. Tuy nhiên, vẫn còn một khoảng cách giữa hai cột. Bất kỳ cách nào để đóng lên đó? – statenjason

+5

Than ôi, GridViewRowPresenter mã hóa cứng Margin thành 6.0,6,0. Tôi e rằng đó sẽ là một lượng công việc hợp lý để giải quyết vấn đề này. –

+0

Cách giải quyết hacky là đặt Lề của Lưới chứa thành -6,0, -6,0. –

3

Đào lên một chủ đề cũ, nhưng tôi tìm thấy một sửa chữa tinh ranh cho điều này

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

Di chuyển lề để màu nền lấp đầy toàn bộ ô, nhưng sau đó di chuyển chúng trở lại để văn bản vẫn ở đúng vị trí. Làm việc cho đến khi nó được cố định đúng cách.

+2

Sau khi đào lên chủ đề này đã đào lên; Tôi tò mò muốn biết nếu hiện tượng này là 'cố định' bây giờ? Tôi đang cố gắng để tìm hiểu WPF sau khi được đi từ mã hóa trong bốn năm, và dường như không thể tìm thấy bất kỳ giải pháp tốt hơn để tạo ra hình nền cột liền mạch của các màu sắc khác nhau. Bất cứ ai có thể chỉ cho tôi một phương pháp hiện đại/tốt hơn đều được chào đón: D – Grim

Các vấn đề liên quan