2011-09-12 23 views
1

私は階層データを持つDataGridを持っています。行の詳細を折りたたむと、親行は自動的にサイズ変更されません。これは最終的には、行の詳細を拡張し続けると、親グリッドは同じレベルで行を折りたたむまで、より多くの領域を使い続けていることを意味します。私はアプリケーションをスヌープし、新しい高さを保持する最も低いレベルの要素がPART_ColumnHeadersPresenterであるDataGridRowsPresenterであることを発見しました。WPF DataGrid行を展開した後に高さを調整しない行の詳細

私は行とグリッドのための私自身のControlTemplateを持っている:

<Style x:Key="{x:Type Custom:DataGrid}" TargetType="{x:Type Custom:DataGrid}"> 
     <Setter Property="CanUserResizeRows" Value="False" /> 
     <Setter Property="Background" 
      Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
     <Setter Property="Foreground" 
      Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="BorderBrush" Value="#FF688CAF" /> 
     <Setter Property="BorderThickness" Value="1" /> 
     <!-- This is needed to force DG to have a non-default value. Otherwise the DGR.DetailsVisibility cannot have a value of VisibleWhenSelected by default. --> 
     <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" /> 
     <Setter Property="ScrollViewer.CanContentScroll" 
      Value="true"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Custom:DataGrid}"> 
        <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         SnapsToDevicePixels="True" 
         Padding="{TemplateBinding Padding}"> 
         <ScrollViewer Focusable="false" 
            Name="DG_ScrollViewer"> 
          <ScrollViewer.Template> 
           <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
            <Grid> 
             <Grid.RowDefinitions> 
              <RowDefinition Height="Auto"/> 
              <RowDefinition Height="*"/> 
              <RowDefinition Height="Auto"/> 
             </Grid.RowDefinitions> 

             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto"/> 
              <ColumnDefinition Width="*"/> 
              <ColumnDefinition Width="Auto"/> 
             </Grid.ColumnDefinitions> 

             <!--Left Column Header Corner --> 
             <Button Command="{x:Static Custom:DataGrid.SelectAllCommand}" 
              Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Custom:DataGrid}}, Path=CellsPanelHorizontalOffset}" 
              Template="{StaticResource SelectAllButtonTemplate}" 
              Focusable="false" 
              Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type Custom:DataGrid}}, Path=HeadersVisibility, Converter={x:Static Custom:DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static Custom:DataGridHeadersVisibility.All}}" /> 

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

             <!--DataGrid content--> 
             <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" 
                   Grid.Row="1" 
                   Grid.ColumnSpan="2" 
                   CanContentScroll="{TemplateBinding CanContentScroll}" 
                   Height="Auto" VerticalAlignment="Stretch"> 


             </ScrollContentPresenter> 

             <ScrollBar Grid.Row="1" Grid.Column="2" Name="PART_VerticalScrollBar" 
             Orientation="Vertical" 
             Maximum="{TemplateBinding ScrollableHeight}" 
             ViewportSize="{TemplateBinding ViewportHeight}" 
             Value="{Binding Path=VerticalOffset, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" 
             Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
             <Grid Grid.Row="2" Grid.Column="1"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Custom:DataGrid}}, Path=NonFrozenColumnsViewportHorizontalOffset}"/> 
               <ColumnDefinition Width="*"/> 
              </Grid.ColumnDefinitions> 
              <ScrollBar Grid.Column="1" 
                Name="PART_HorizontalScrollBar" 
                Orientation="Horizontal" 
                Maximum="{TemplateBinding ScrollableWidth}" 
                ViewportSize="{TemplateBinding ViewportWidth}" 
                Value="{Binding Path=HorizontalOffset, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" 
                Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
             </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> 

<ControlTemplate x:Key="PlainDataGridRowControlTemplate" TargetType="{x:Type Custom:DataGridRow}"> 
     <Grid x:Name="LayoutRoot"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Grid x:Name="DGR_Border" 
       Background="Transparent" 
       SnapsToDevicePixels="True"> 
       <Custom:SelectiveScrollingGrid Name="DGR_SelectiveScrollingGrid"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 

        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 

        <Custom:DataGridCellsPresenter Grid.Column="1" Name="DGR_CellsPresenter" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        <Custom:DataGridDetailsPresenter Height="Auto" 
                  Grid.Column="1" 
                  Grid.Row="1" 
                  Visibility="{TemplateBinding DetailsVisibility}" Custom:SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding RelativeSource={RelativeSource AncestorType={x:Type Custom:DataGrid}}, Path=AreRowDetailsFrozen, Converter={x:Static Custom:DataGrid.RowDetailsScrollingConverter}, ConverterParameter={x:Static Custom:SelectiveScrollingOrientation.Vertical}}" /> 
        <!--<localprimitives:DataGridRowHeader localprimitives:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DataGrid}}, Path=HeadersVisibility, Converter={x:Static local:DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static local:DataGridHeadersVisibility.Row}}"/>--> 
        <Custom:DataGridRowHeader Grid.RowSpan="2" Custom:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" /> 
       </Custom:SelectiveScrollingGrid> 
      </Grid> 
     </Grid> 
    </ControlTemplate> 
    <Style TargetType="Custom:DataGridRow"> 
     <Setter Property="Margin" Value="0, 0, 0, 0"/> 
     <Setter Property="Template" Value="{StaticResource PlainDataGridRowControlTemplate}" /> 
    </Style> 

誰かが助言していただけますか?

答えて

3

私はDataGridのスタイルの中に、このセッターを使用してこの問題を解決:

<Setter Property="ScrollViewer.CanContentScroll" Value="False" />

しかし、これは、このセッターで動作し、なぜ私に聞かないでください。

関連する問題