2014-12-17 2 views
5

어떻게 wpf DataGrid에 바닥 글 행을 추가합니까? 나는 각 열의 합계에 대한 wpf 데이터 격자에 행을 추가해야만했다. 나는 dll이나 telerik을 사용하고 싶지 않고, 이렇게하기 위해 마이크로 소프트 컴포넌트만을 사용한다.WPF DataGrid에 바닥 글 행을 추가하려면 어떻게합니까?

<Style TargetType="{x:Type DataGrid}"> 
     <Setter Property="Foreground" 
     Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
     <Setter Property="BorderBrush"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" 
         StartPoint="0.5,0"> 
        <GradientStop Color="{DynamicResource BorderLightColor}" 
        Offset="0" /> 
        <GradientStop Color="{DynamicResource BorderDarkColor}" 
        Offset="1" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="BorderThickness" 
     Value="1" /> 
     <Setter Property="RowDetailsVisibilityMode" 
     Value="VisibleWhenSelected" /> 
     <Setter Property="ScrollViewer.CanContentScroll" 
     Value="true" /> 
     <Setter Property="ScrollViewer.PanningMode" 
     Value="Both" /> 
     <Setter Property="Stylus.IsFlicksEnabled" 
     Value="False" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGrid}"> 
        <Border x:Name="border" 
      SnapsToDevicePixels="True" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      Padding="{TemplateBinding Padding}"> 
         <Border.Background> 
          <SolidColorBrush Color="{DynamicResource ControlLightColor}" /> 
         </Border.Background> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetName="border" 
              Storyboard.TargetProperty="(Panel.Background). 
        (SolidColorBrush.Color)"> 
              <EasingColorKeyFrame KeyTime="0" 
            Value="{DynamicResource ControlLightColor}" /> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Normal" /> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <ScrollViewer x:Name="DG_ScrollViewer" 
        Focusable="false" 
        Background="Black"> 
          <ScrollViewer.Template> 
           <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto" /> 
              <ColumnDefinition Width="*" /> 
              <ColumnDefinition Width="Auto" /> 
             </Grid.ColumnDefinitions> 
             <Grid.RowDefinitions> 
              <RowDefinition Height="Auto" /> 
              <RowDefinition Height="*" /> 
              <RowDefinition Height="Auto" /> 
              <RowDefinition Height="Auto" /> 
             </Grid.RowDefinitions> 

             <Button Focusable="false" 
         Command="{x:Static DataGrid.SelectAllCommand}" 
         Style="{DynamicResource {ComponentResourceKey 
        ResourceId=DataGridSelectAllButtonStyle, 
        TypeInTargetAssembly={x:Type DataGrid}}}" 
         Visibility="{Binding HeadersVisibility, 
        ConverterParameter={x:Static DataGridHeadersVisibility.All}, 
        Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
        RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
         Width="{Binding CellsPanelHorizontalOffset, 
        RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 

             <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" 
               Grid.Column="1" 
               Visibility="{Binding HeadersVisibility, 
        ConverterParameter={x:Static DataGridHeadersVisibility.Column}, 
        Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
        RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 

             <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" 
             Grid.ColumnSpan="2" 
             Grid.Row="1" 
             CanContentScroll="{TemplateBinding CanContentScroll}" /> 

             <ScrollBar x:Name="PART_VerticalScrollBar" 
         Grid.Column="2" 
         Grid.Row="1" 
         Orientation="Vertical" 
         ViewportSize="{TemplateBinding ViewportHeight}" 
         Maximum="{TemplateBinding ScrollableHeight}" 
         Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
         Value="{Binding VerticalOffset, Mode=OneWay, 
        RelativeSource={RelativeSource TemplatedParent}}"/> 
             <TextBlock Grid.Row="2" Grid.Column="1" Text="This is footer!"/> 
             <Grid Grid.Column="1" 
        Grid.Row="3"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, 
         RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 
               <ColumnDefinition Width="*" /> 
              </Grid.ColumnDefinitions> 

              <ScrollBar x:Name="PART_HorizontalScrollBar" 
          Grid.Column="1" 
          Orientation="Horizontal" 
          ViewportSize="{TemplateBinding ViewportWidth}" 
          Maximum="{TemplateBinding ScrollableWidth}" 
          Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
          Value="{Binding HorizontalOffset, Mode=OneWay, 
        RelativeSource={RelativeSource TemplatedParent}}"/> 
             </Grid> 
            </Grid> 
           </ControlTemplate> 
          </ScrollViewer.Template> 
          <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </ScrollViewer> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsGrouping" 
     Value="true"> 
       <Setter Property="ScrollViewer.CanContentScroll" 
      Value="false" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

내가 대신 TextBlock의 격자를 추가했지만, 데이터 그리드 컬럼 크기를 조정하면, 그들은 크기를 조정하고 매우 추한 외모 수 없습니다 내가있어이 방법을 수행하려고합니다.

답변

12

시도해보십시오.

<ScrollViewer VerticalAlignment="Top" HorizontalScrollBarVisibility="Auto"> 
    <StackPanel> 
     <DataGrid ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="Header1" Header="Header1"></DataGridTextColumn> 
       <DataGridTextColumn x:Name="Header2" Header="Header2"></DataGridTextColumn> 
       <DataGridTextColumn x:Name="Header3" Header="Header3"></DataGridTextColumn> 
      </DataGrid.Columns> 
      <TextBlock></TextBlock> 
      <TextBlock></TextBlock>       
     </DataGrid> 
     <StackPanel HorizontalAlignment="Left" Orientation="Horizontal"> 
      <Grid Width="{Binding ElementName=Header1,Path=ActualWidth}"> 
       <TextBlock Margin="5,0,0,0" Text="Footer1"></TextBlock> 
      </Grid> 
      <Grid Width="{Binding ElementName=Header2,Path=ActualWidth}"> 
       <TextBlock Text="Footer2" Margin="5,0,0,0"></TextBlock> 
      </Grid> 
      <Grid Width="{Binding ElementName=Header3,Path=ActualWidth}"> 
       <TextBlock Text="Footer3" Margin="5,0,0,0"></TextBlock> 
      </Grid> 
     </StackPanel> 
    </StackPanel> 
</ScrollViewer> 

결과 enter image description here

+0

작동하지만 3 개 기록 후 내가 열 또는 헤더의 총 합계를 표시 할 대신 footer3의 sum.suppose의 총 바닥 글을 결합하는 것은 매우 어렵다 그것을 바인딩되지 않습니다. – Rahul

+0

추가 속성을 하나 만들고 속성의 합계를 표시 할 수 있습니다. –

관련 문제