边境

2016-12-07 50 views
0

我要创建每个列标题有圆角这WPF的表是我走到这一步:边境

enter image description here

,你可以看到,我有理想的结果有一些不想要的结果。 不希望出现的是,所有数据网格头本身(不是列)获得相同的边框,我需要使它透明,我该怎么做?

这是风格的一部分:

<DataGrid.ColumnHeaderStyle> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="SeparatorBrush" Value="Transparent"/> 
     <Setter Property="Margin" Value="2"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate>           
         <Grid> 
          <Border CornerRadius="5 5 0 0" BorderThickness="1" BorderBrush="Black"> 
           <TextBlock Text="{Binding }"/> 
          </Border> 
         </Grid>           
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</DataGrid.ColumnHeaderStyle> 

回答

1

出于某些原因,数据网格在其模板空白DataGridColumnHeader。空白列没有DataContext值(null)。因此,改变边境刷透明的DataTrigger:

<ControlTemplate> 
    <Grid> 
     <Border CornerRadius="5 5 0 0" BorderThickness="1" > 
      <TextBlock Text="{Binding}"/> 
      <Border.Style> 
       <Style TargetType="Border"> 
        <Setter Property="BorderBrush" Value="Black"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding}" Value="{x:Null}"> 
          <Setter Property="BorderBrush" Value="Transparent"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Border.Style> 
     </Border> 
    </Grid> 
</ControlTemplate> 


改进版本,它使用ContentPresenter在头模板,测试内容在触发

<ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
    <Grid> 
     <Border CornerRadius="5 5 0 0" BorderThickness="1" > 
      <ContentPresenter/>           
      <Border.Style> 
       <Style TargetType="Border"> 
        <Setter Property="BorderBrush" Value="Black"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}"> 
          <Setter Property="BorderBrush" Value="Transparent"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Border.Style> 
     </Border> 
    </Grid> 
</ControlTemplate> 

头是没有必要的文字,例如:

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path=Name}"> 
     <DataGridTextColumn.Header> 
      <Border Background="Cyan"> 
       <TextBlock Text="NAME" Margin="5"/> 
      </Border> 
     </DataGridTextColumn.Header> 
    </DataGridTextColumn> 
</DataGrid.Columns> 
+0

谢谢你,这正是我需要的,谢谢你这么多 – Joe

+1

嗨,当我使用一nd添加datacontext它显示了我的数据网格内的对象的类如何删除它?例如,如果我的类是ViewModel而不是数据网格,它会向我显示所有列的标题,并显示名称为ViewModel的另一列,并且此列在其他列之上 – Joe

+0

@Joe的确,我没有为我的测试使用DataContext,只设置ItemsSource ;与dataContext它不能按预期工作。请参阅改进版本 – ASh