2010-03-21 19 views
6

Aşağıdaki ekran görüntüsünde olduğu gibi alt sütun başlıklarını göstermek için bir DataGrid sütun başlıkları özelleştirmek için çalışıyorum:DataGridColumnHeader stili nasıl özelleştirilir ve yeniden kullanılır?

alt text http://img297.imageshack.us/img297/464/columnheaders.gif

aşağıdaki gibi 2 alt sütunları için bir stil yaptık XAML:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
xmlns:sl="clr-namespace:UI" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="UI.ColumnHeaderGrid" 
mc:Ignorable="d"> 
<UserControl.Resources> 
    <Style x:Key="SplitColumnHeaderStyle" TargetType="primitives:DataGridColumnHeader"> 
     <Setter Property="Foreground" Value="#FF000000"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="SeparatorBrush" Value="#FFC9CACA"/> 
     <Setter Property="Padding" Value="4"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="primitives:DataGridColumnHeader"> 
        <Grid x:Name="Root"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Rectangle x:Name="BackgroundRectangle" Fill="#FF1F3B53" Stretch="Fill" Grid.ColumnSpan="2"/> 
         <Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2"> 
          <Rectangle.Fill> 
           <LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0"> 
            <GradientStop Color="#FCFFFFFF" Offset="0.015"/> 
            <GradientStop Color="#F7FFFFFF" Offset="0.375"/> 
            <GradientStop Color="#E5FFFFFF" Offset="0.6"/> 
            <GradientStop Color="#D1FFFFFF" Offset="1"/> 
           </LinearGradientBrush> 
          </Rectangle.Fill> 
         </Rectangle> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition/> 
           <ColumnDefinition Width="1"/> 
           <ColumnDefinition/> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition/> 
           <RowDefinition/> 
           <RowDefinition/> 
          </Grid.RowDefinitions> 
          <TextBlock Grid.Row="0" Grid.ColumnSpan="3" Text="Headers" TextAlignment="Center"/> 
          <Rectangle Grid.Row="1" Grid.ColumnSpan="3" Fill="{TemplateBinding SeparatorBrush}" Height="1"/> 
          <TextBlock Grid.Row="2" Grid.Column="0" Text="Header 1" TextAlignment="Center"/> 
          <Rectangle Grid.Row="2" Grid.Column="1" Fill="{TemplateBinding SeparatorBrush}" Width="1"/> 
          <TextBlock Grid.Row="2" Grid.Column="2" Text="Header 2" TextAlignment="Center"/> 
          <Path x:Name="SortIcon" Grid.Column="2" Fill="#FF444444" Stretch="Uniform" HorizontalAlignment="Left" Margin="4,0,0,0" VerticalAlignment="Center" Width="8" Opacity="0" RenderTransformOrigin=".5,.5" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z "/> 
         </Grid> 
         <Rectangle x:Name="VerticalSeparator" Fill="{TemplateBinding SeparatorBrush}" VerticalAlignment="Stretch" Width="1" Visibility="{TemplateBinding SeparatorVisibility}" Grid.Column="1"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 
<data:DataGrid x:Name="LayoutRoot"> 
    <data:DataGrid.Columns> 
     <data:DataGridTemplateColumn HeaderStyle="{StaticResource SplitColumnHeaderStyle}"> 
      <data:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition/> 
         </Grid.ColumnDefinitions> 
         <Border Grid.Column="0" BorderBrush="#FFC9CACA" BorderThickness="0,0,0,0"> 
          <TextBlock Grid.Column="0" Text="{Binding GridData.Column1}"/> 
         </Border> 
         <Border Grid.Column="1" BorderBrush="#FFC9CACA" BorderThickness="1,0,0,0"> 
          <TextBlock Grid.Column="0" Text="{Binding GridData.Column2}"/> 
         </Border> 
        </Grid> 
       </DataTemplate> 
      </data:DataGridTemplateColumn.CellTemplate> 
     </data:DataGridTemplateColumn> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

Şimdi 2-> 6 alt sütun başlıkları desteklemek için bu tarz uzatmak & yeniden istiyorum ama bunu yapmanın bir yolu varsa bilmiyorum , ContentPresenter gibi "ağır basan":

neyse
<Style x:Key="SplitColumnHeaderStyle" TargetType="primitives:DataGridColumnHeader"> 
    <Setter property="Template"> 
     <Setter.Value> 
      ... 
      <ContentPresenter Content="{TemplateBinding Content}".../> 
      ... 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="TwoSubColumnHeaderStyle" BasedOn="SplitColumnHeaderStyle"> 
    <Setter property="Content"> 
     <Setter.Value> 
      <Grid 2x2.../> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="ThreeSubColumnHeaderStyle" BasedOn="SplitColumnHeaderStyle"> 
    <Setter property="Content"> 
     <Setter.Value> 
      <Grid 2x3.../> 
     </Setter.Value> 
    </Setter> 
</Style> 

, bu konularda bana yardım edin:

  1. yukarıdaki şablonları göz önüne alındığında, yeni bir şablon oluşturmak zorunda kalmadan daha fazla alt sütun başlıkları nasıl destek her? Yukarıdaki sorunun çözüldüğünü varsayarsak

  2. . Sütun adlarını stiller dışında nasıl ekleyebilirim?

  3. Ben Onlar varsayılan davranışları veya etkilerini desteklemek amacıyla olmalı ... bazı parçalar, XAML özellikleri & Görüntüleme kurallarını orijinal Silverlight bileşenin tarzı, yani BackgroundGradient, BackgroundRectangle, VisualStateManager sadece kopya olduğunu görüyoruz ama ... onları nasıl kaldıracağını bilen var mı, ama tüm varsayılan davranışları/etkileri saklıyor mu?

Lütfen spesifik olun çünkü C# & Silverlight ile çalışmaya başladım.

cevap

0
+1

Teşekkür ama ızgara bu tür oluşturmak başardı benim sonrası bahsetti. Bundan sonra ne yapacağımı bilmiyorum, bu şablonu herhangi bir alt sütun için tekrar kullanacak şekilde özelleştirmek. Ben kopyalamak sona erdi, değiştirmek ve bu çözmek için şablon yapıştırın ve sıkıcı bir görev oldu :( – instcode

+2

@Jasper: Sadece bağlantı sağlamak yerine, daha ayrıntılı bir cevap verebilirseniz bu harika olurdu ve kalitesini artıracak Cevabınız. Bahsettiğiniz bağlantıdan alıntı yapmak için deneyin. –

İlgili konular