2013-11-08 2 views
0

Мне интересно укладывать заголовки столбцов в Xceed DataGrid. Цель состоит в том, чтобы сделать цвет фона серым, с темно-серой рамкой вокруг каждой ячейки столбца заголовка. Мне казалось, как лучший способ сделать это, чтобы стиль ColumnManager:Styling Xceed ColumnManagerCell

<Style TargetType="{x:Type xcdg:ColumnManagerCell}"> 
    <Setter Property="Template" Value="{StaticResource ColumnManagerCellTemplate}"/> 
    <Setter Property="BorderBrush" Value="#c5c5c5"/> 
    <Setter Property="BorderThickness" Value="1,1,1,1"/> 
</Style> 

Используя этот шаблон:

<ControlTemplate x:Key="ColumnManagerCellTemplate" TargetType="xcdg:ColumnManagerCell"> 
     <Grid Background="LightGray" > 
      <xcdg:DataCell Content="{TemplateBinding Content}" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Center" 
          Background="LightGray" 
          HorizontalContentAlignment="Left" 
          VerticalContentAlignment="Center" 
          BorderBrush="DarkGray" 
          BorderThickness="2"/> 
     </Grid> 
    </ControlTemplate> 

Цвет фона показывает правильно, как и содержание, но я не могу получить темно-серая граница, чтобы появиться вокруг каждой ячейки. (Или любая граница цвета вообще.) Что мне не хватает? Не следует ли контролировать свойства BorderBrush и BorderThickness? Кажется, они работают над остальными ячейками в сетке, но не с ColumnManagerCells.

ответ

1

Вы должны использовать границу вместо сетки, а затем подключить привязки шаблона для границы, как это:

<Style TargetType="{x:Type xcdg:ColumnManagerCell}"> 
    <Setter Property="Background" Value="LightGray" /> 
    <Setter Property="BorderBrush" Value="#c5c5c5"/> 
    <Setter Property="BorderThickness" Value="1,1,1,1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ContentControl"> 
       <Border Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}"> 
        <ContentPresenter Content="{TemplateBinding ContentControl.Content}" 
            ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" 
            ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

я должен упомянуть, что мое по умолчанию ControlTemplate для ColumnManagerCell является ContentPresenter вместо Datacell, как показано ниже :

<xcdg:DataCell Content="{TemplateBinding Content}" /> 

Вы уверены, что используете правильный шаблон управления?

+0

Это сработало отлично! Спасибо. Я не понимал, что вам не нужно иметь сетку внутри ColumnManagerCell - я просто подражал тому, что я мог видеть в макете пользовательского интерфейса, используя WPF Inspector. – quietkatalyst