2016-12-07 12 views
0

Я хочу, чтобы создать таблицу на МОФ, что каждый заголовок столбца имеет круглый угол это то, что я получил до сих пор:Border в заголовке столбца

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

по некоторым причинам, DataGrid имеет пустой 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 add datacontext показывает мне класс объекта внутри datagrid, как я могу его удалить? например, если мой класс является ViewModel, чем в сетке данных, он показывает мне все заголовки столбцов и другой столбец с именем ViewModel, и этот столбец над другими столбцами. – Joe

+0

@ Joe, действительно, я не использовал DataContext для моего теста, а только установить ItemsSource ; с dataContext он работает не так, как ожидалось. см. улучшенную версию – ASh