2010-12-08 3 views
7

У меня есть сетка данных WPF (из набора инструментов WPF, как указано в заголовке), и мне нужен разрыв между некоторыми столбцами, где даже заголовок не указан выше, и вы можете см. фон между ними. Я не знаю, как это сделать.Как создать промежуток между столбцами WPFoolkit DataGrid

Кстати, все мои столбцы - это TemplateColumns, но я бы предпочел решение, в котором мне не нужно стирать каждый столбец и его заголовок, чтобы иметь gab с одной стороны. Возможно, что-то вроде <DataGridGapColum Width="5" />, но чего-то подобного не существует, к сожалению.

+0

Я думаю, что изображение, которое показывает, что вы просите поможет – Erez 2010-12-15 20:51:25

ответ

6

Для этого потребуется несколько шагов. Сначала нам нужно отключить GridLines в DataGrid, чтобы мы могли получить «Gap Cells». Вместо этого мы оставим GridLines в DataGridCells. Мы также должны указать GridLinesBrush. Мы не можем создать стиль DataGridGapColumn для DataGridColumn, так как он не выводится из FrameworkElement, поэтому нам придется соглашаться на GapCellStyle и GapHeaderStyle. Тогда мы можем создать "DataGridGapColumn" как этот

<DataGridTextColumn Width="100" 
        CellStyle="{StaticResource DataGridGapCell}" 
        HeaderStyle="{StaticResource DataGridGapHeader}"/> 

alt text

Пример с некоторыми Колонны и Gap колонн

<DataGrid x:Name="dataGrid" 
      GridLinesVisibility="None" 
      HorizontalGridLinesBrush="Black" 
      ...> 
    <DataGrid.Resources> 
     <!-- Regular Cell Style --> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0,0,1,1"/> 
      <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/> 
     </Style> 
     <!-- Gap Cell Style --> 
     <Style x:Key="DataGridGapCell" TargetType="DataGridCell"> 
      <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/> 
      <Setter Property="BorderThickness" Value="0,0,1,0"/> 
      <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/> 
     </Style> 
     <!-- Gap ColumnHeader Style --> 
     <Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader"> 
      <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/> 
     <DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/> 
     <DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/> 
     <DataGridTextColumn Header="Header 3" Binding="{Binding Header3}"/> 
     <DataGridTextColumn Width="50" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/> 
     <DataGridTextColumn Header="Header 4" Binding="{Binding Header4}"/> 
     <DataGridTextColumn Header="Header 5" Binding="{Binding Header5}"/> 
    </DataGrid.Columns> 
</DataGrid> 

Update
Вы можете поместить Стили в ResourceDictionary или в Window.Resouces. Пример

<Window.Resources> 
    <Style x:Key="DataGridGapStyle" TargetType="DataGrid"> 
     <Setter Property="GridLinesVisibility" Value="None"/> 
     <Setter Property="HorizontalGridLinesBrush" Value="Black"/> 
    </Style> 
    <!-- Regular Cell Style --> 
    <Style TargetType="DataGridCell"> 
     <Setter Property="BorderThickness" Value="1,0,1,1"/> 
     <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/> 
    </Style> 
    <!-- Gap Cell Style --> 
    <Style x:Key="DataGridGapCell" TargetType="DataGridCell"> 
     <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/> 
     <Setter Property="BorderThickness" Value="0,0,0,0"/> 
     <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/> 
    </Style> 
    <!-- Gap ColumnHeader Style --> 
    <Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader"> 
     <Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/> 
    </Style> 
</Window.Resources> 
<Grid> 
    <DataGrid x:Name="dataGrid" 
       Style="{StaticResource DataGridGapStyle}" 
       AutoGenerateColumns="False" 
       ItemsSource="{Binding MyCollection}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/> 
      <DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/> 
      <DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
+0

Ну, немного грустный, что это сложно, но нормально. Спасибо – Tokk 2010-12-16 13:18:32

Смежные вопросы