2012-02-23 32 views

Trả lời

1

Màu của hình chữ nhật đó phía trên thanh cuộn là thuộc tính Nền của DataGrid. Vì vậy, ví dụ, nếu bạn muốn làm cho nó màu vàng bạn có thể thiết lập

<DataGrid Background="Yellow" ... 

Nhược điểm của việc này (khả năng) là nền sau đó ảnh hưởng đến toàn bộ DataGrid của bạn, bao gồm bất kỳ không gian không đưa lên bởi hàng dữ liệu:

enter image description here

một giải pháp, nếu bạn muốn hình chữ nhật trong câu hỏi để có màu vàng nhưng không phải là không gian bên dưới các hàng dữ liệu, có thể thiết kế một bàn chải tùy chỉnh mà trả lại vàng cho một dải rộng tương tự như các tiêu đề cột và trắng cho phần còn lại.

+0

Đây là lựa chọn tốt hơn trong hai, và tôi có thể đặt một nền gradient trong đó để làm cho nó trông giống như tôi muốn nó . Tôi nghĩ rằng tôi đã thử điều này, thay đổi nền tảng trên DataGrid có nghĩa là, nhưng phát hiện ra rằng tôi muốn ghi đè vào phút cuối để ngăn các thay đổi của tôi có hiệu lực. :) –

+1

Tuyệt vời. Chỉ trong trường hợp bạn đang tự hỏi, bạn có thể làm cho một bàn chải với hai bàn chải và không có gradient giữa hai bằng cách đặt hai điểm dừng ở cùng một vị trí. Như được mô tả ở đây: http://stackoverflow.com/questions/6546837/wpf-background-two-tone –

0

Không chắc chắn nếu điều này giúp, nhưng có một cách tiếp cận tôi đã sử dụng trong quá khứ để tách các cột từ tiêu đề của họ và trình bày chúng một cách riêng biệt.

Các định nghĩa cột được định nghĩa trong các nguồn lực:

<UserControl.Resources> 
    <ResourceDictionary> 
     <GridViewColumnCollection x:Key="siColumnCollection"> 
      <GridViewColumn> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         ... 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
       <GridViewColumnHeader Content="Fish"/> 
      </GridViewColumn> 
    ... 

Sau đó, các tiêu đề và listview được trình bày riêng, cả hai tham khảo tài nguyên giống nhau:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <GridViewHeaderRowPresenter Columns="{StaticResource siColumnCollection}"/> 
    <ListView Grid.Row="1" ItemsSource="{Binding ViewModelList}"> 
     <ListView.Resources> 
      <DataTemplate x:Key="siNormalRowTemplate"> 
       <GridViewRowPresenter Columns="{StaticResource siColumnCollection}"/> 
      </DataTemplate> 
     </ListView.Resources> 
    </ListView> 
</Grid> 

(Tôi không thể hứa XAML này hoạt động chính xác như được viết, nhưng nó mang lại cho bạn ý tưởng).

Ưu điểm của sự sắp xếp này là bạn được tự do xử lý tiêu đề và phần chính của danh sách riêng biệt. Vì vậy, nếu bạn muốn đặt vào một số phụ ngay lập tức sau GridViewHeaderRowPresenter, bạn được tự do làm như vậy.

Chỉnh sửa: Giải pháp này hoạt động nếu bạn có GridView nhưng tiếc là không hoạt động đối với DataGrid. Tôi không thể nhìn thấy một cách tương đương để tách tiêu đề và hàng trong DataGrid để câu trả lời này sẽ chỉ hoạt động nếu bạn chuẩn bị trao đổi DataGrid cho GridView. Lấy làm tiếc!

5

Vui lòng sử dụng mẫu sau (các ColumnSpan hiện các trick):

 <Style x:Key="{x:Type DataGridColumnHeadersPresenter}" TargetType="{x:Type DataGridColumnHeadersPresenter}"> 
      <Setter Property="Grid.ColumnSpan" Value="2" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}"> 
         <Grid> 
          <DataGridColumnHeader IsHitTestVisible="False" Name="PART_FillerColumnHeader"/> 
          <ItemsPresenter/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+1

Tùy chọn thú vị, nó hoạt động nhưng bạn vẫn có thể nhìn thấy dấu phân cách và con trỏ chuột resizecolumn. – Gerard

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