2016-08-15 13 views
0

データベースからデータを取得するときに、データグリッドに代替の空白行を追加したいと思います。 (AlternationCount="2" AlternatingRowBackground="LightGray"を使用し、それが視覚的に行ごとに分離する助けを行いましたが、それはより良い行がデータ行する場合、それはより大きなビジュアル体験を持つように空白行を持つだろうします)C#WPF - データグリッドの代替空白行

おかげ

答えて

2

いくつかの無駄なデータを追加して視覚的な経過を変更することはお勧めできません。おそらく、データグリッド行のスタイルを変更して、余分なスペースを加えて、必要に応じて塗りつぶしてください。例えば

、あなたのリソースに新しいスタイルを追加します。

<Style x:Key="MyDataGridRowStyle" TargetType="{x:Type DataGridRow}"> 
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
    <Setter Property="ValidationErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <TextBlock Foreground="Red" Margin="2,0,0,0" Text="!" VerticalAlignment="Center"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridRow}"> 
       <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
        <SelectiveScrollingGrid> 
         <SelectiveScrollingGrid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </SelectiveScrollingGrid.ColumnDefinitions> 
         <SelectiveScrollingGrid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Name="ExtraRow" Height="20"/> 
         </SelectiveScrollingGrid.RowDefinitions> 
         <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/> 
         <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
         <TextBlock Grid.Row="2" Grid.Column="1" Text=" *** Extra space *** " FontSize="8" VerticalAlignment="Center" Margin="100,0"/> 
        </SelectiveScrollingGrid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsNewItem" Value="True"> 
      <Setter Property="Margin" Value="{Binding NewItemMargin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

次に、あなたのデータグリッドでそれを使用します。

enter image description here

<DataGrid RowStyle="{StaticResource MyDataGridRowStyle}"> 

次のようなものを取得します追加: テンプレート

<ControlTemplate TargetType="{x:Type DataGridRow}"> 
    <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
     <SelectiveScrollingGrid> 
      <SelectiveScrollingGrid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </SelectiveScrollingGrid.ColumnDefinitions> 
      <SelectiveScrollingGrid.RowDefinitions> 
       <RowDefinition Name="ExtraRow1" Height="10"/> 
       <RowDefinition Height="*"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Name="ExtraRow2" Height="10"/> 
      </SelectiveScrollingGrid.RowDefinitions> 
      <Border Grid.Row="0" Grid.Column="1" BorderThickness="0,0,0,1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderBrush="Black"/> 
      <DataGridCellsPresenter Grid.Column="1" Grid.Row="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      <DataGridDetailsPresenter Grid.Column="1" Grid.Row="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/> 
      <DataGridRowHeader Grid.RowSpan="4" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
     </SelectiveScrollingGrid> 
    </Border> 
</ControlTemplate> 

enter image description here

+0

おかげのように見えます。コードはほぼ完成しています。 IsNewItem(In .....)でエラーが発生します。私がしているのは、コードのその部分を削除するだけで、うまくいきます(コードを削除することの欠点は何であるかわかりません)。また、行の上に行を置くこともできます(行を正方形にするには、4つの方向をカバーします)。 – user6648485

+0

IsNewItemプロパティは.NET 4.5で作成されました。したがって、より低いバージョンで作業する場合は、ご使​​用のバージョンの.Net用のDataGridRowの元のテンプレートを入手して修正する方がよいでしょう。 WPFでは、あなたが想像することのできるほぼすべての視覚的外観をコントロール用に持つことができます。私はあなたの要件を満たすために私の答えを修正しましたが、あなたが望むものを正確に捉えたかどうかは分かりません。 – Sergey

+0

@ Sergey、それは見た目がクールだと私はビルドしようとしている(しかし、私はまだそれを独立して構築する)です。あなたの指導に多くの感謝。 :-) – user6648485

-1

あなたがしている場合あなたのデータグリッドでコレクションをバインドすると、そのアイテムのソースを調べることでDataGridがいっぱいになるため、コレクションは不可能になります。私は念頭に置いて解決策を持っているが、私はそれが評価されるとは思わない。

コレクションには、交互の各インデックスに空のオブジェクトを入力します。これは、DataGridに空の行を作成します。

関連する問題