0

HeaderRowに別の行を追加し、各列に特定のコントロールを挿入します。
これは、この行を追加する私のコードですが、すべての列に同じコントロール(この場合はテキストボックス)しか設定できませんが、特定の列に特定のコントロールを設定したいと思います。(ASP.NETリピーターで行われるように)

<Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}">
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
           <Grid x:Name="grid" VerticalAlignment="Center" HorizontalAlignment="Stretch"  Background="{TemplateBinding Background}">
              <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
              </Grid.RowDefinitions>
              <TextBlock Name="ColumnHeader" Grid.Row="0" Text="{TemplateBinding Content}"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="18" />
              <Grid Grid.Row="1">
                 <TextBox Text="" HorizontalAlignment="Stretch" BorderThickness="0,1,1,1" />
              </Grid>
          </Grid>
</Style>
4

2 に答える 2

4

HeaderTemplateを使用して、列ごとに異なるデータテンプレートを指定できます

サンプル

<Window.Resources>
    <DataTemplate x:Key="Template1">
        <Grid x:Name="grid" VerticalAlignment="Center" HorizontalAlignment="Stretch">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Name="ColumnHeader" Text="Student Id" Grid.Row="0"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="18" />
            <Grid Grid.Row="1">
                <TextBox Text="" HorizontalAlignment="Stretch" BorderThickness="0,1,1,1" />
            </Grid>
        </Grid>
    </DataTemplate>
    <DataTemplate x:Key="Template2">
        <Grid x:Name="grid" VerticalAlignment="Center" HorizontalAlignment="Stretch">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Name="ColumnHeader" Text="Student Name" Grid.Row="0"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="18" />
            <Grid Grid.Row="1">
                <TextBox Text="" HorizontalAlignment="Stretch" BorderThickness="0,1,1,1" />
            </Grid>
        </Grid>
    </DataTemplate>
</Window.Resources>
<Grid>
    <DataGrid Name="dataGrid" >
        <DataGrid.Columns>
            <DataGridTextColumn HeaderTemplate="{StaticResource Template1}"  Width="90*" MinWidth="120" Binding="{Binding StudentId}"/>
            <DataGridTextColumn HeaderTemplate="{StaticResource Template2}" Width="90*" MinWidth="120" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Score" Width="100*" MinWidth="150" Binding="{Binding Score}"/>
        </DataGrid.Columns>
    </DataGrid>

</Grid>
于 2011-05-20T09:16:34.563 に答える
3

私はこれに少し異なったアプローチをしました。DataGridColumnHeadersPresenterのスタイルを設定しました。これにより、(列ヘッダーの代わりに)列ヘッダーの行をスタイル設定できます。
そこで、新しい行と必要なすべてのコントロールを追加し、すべてのセルの幅をそのヘッダーの幅と一致するように設定します。

<Style x:Key="DataGridColumnHeadersPresenterStyle1" TargetType="{x:Type DataGridColumnHeadersPresenter}">
    <Setter Property="Template">
      <Setter.Value>
          <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
              <Grid>
                <Grid.RowDefinitions>
                  <RowDefinition Height="*"/>
                  <RowDefinition Height="*"/>                   
              </Grid.RowDefinitions>
              <DataGridColumnHeader x:Name="PART_FillerColumnHeader" IsHitTestVisible="False"/>                         
              <ItemsPresenter/>
              <Grid  Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Left" >

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="{Binding ActualWidth, ElementName=Col1}"/>         
                    <ColumnDefinition Width="{Binding ActualWidth, ElementName=Col2}"/>
                    <ColumnDefinition Width="{Binding ActualWidth, ElementName=Col3}"/>
                </Grid.ColumnDefinitions>
                <TextBox  Grid.Column="0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Bottom" Width="Auto" Height="25" BorderThickness="1,2,0,2"/>
                   my other controls go here
              </Grid>
            </Grid>
        </ControlTemplate>
    </Setter.Value>
 </Setter>

于 2011-05-23T11:48:11.110 に答える