2013-05-23 2 views
0

Я занимаюсь дизайном Grid Columns, и есть некоторые столбцы с настраиваемым шаблоном, а некоторые - с шаблоном по умолчанию.Стиль не применяется в первый раз

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

Мой код позади определяет следующие вложенные свойства

public static readonly DependencyProperty GridLinesBorderBrushProperty = DependencyProperty.RegisterAttached("GridLinesBorderBrush", typeof(SolidColorBrush), typeof(CarbonBlotter), new PropertyMetadata(Brushes.Transparent)); 

public static readonly DependencyProperty GridLinesBorderThicknessProperty = DependencyProperty.RegisterAttached("GridLinesBorderThickness", typeof(Thickness), typeof(CarbonBlotter), new PropertyMetadata(new Thickness(0))); 

public SolidColorBrush GetGridLinesBorderBrush(UIElement element_) 
{ 
    return (SolidColorBrush)element_.GetValue(GridLinesBorderBrushProperty); 
} 

public void SetGridLinesBorderBrush(UIElement element_, SolidColorBrush value_) 
{ 
    element_.SetValue(GridLinesBorderBrushProperty, value_); 
} 

public Thickness GetGridLinesBorderThickness(UIElement element_) 
{ 
    return (Thickness)element_.GetValue(GridLinesBorderThicknessProperty); 
} 

private void ShowGridLines() 
    { 
     UserSettings.GridLineType gridLineType = _userSettings.ShowGridLines; 
     Thickness gridLinesBorderThickness = new Thickness(0, 0, 1, 1); 
     if (gridLineType == UserSettings.GridLineType.Off) 
     { 
     SetGridLinesBorderThickness(_grid, new Thickness(0)); 
     SetGridLinesBorderBrush(_grid, Brushes.Transparent); 
     SetAllowGridLines(_grid, false); 
     } 
     else (gridLineType == UserSettings.GridLineType.Black) 
     { 
     SetGridLinesBorderThickness(_grid, gridLinesBorderThickness); 
     SetGridLinesBorderBrush(_grid, Brushes.Black); 
     SetAllowGridLines(_grid, true); 
     }  
    } 

И на моем Xaml у меня есть шаблон по умолчанию

<Style TargetType="ig:CellValuePresenter" BasedOn="{StaticResource {x:Type ig:CellValuePresenter}}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="{Binding Path=DataPresenter.(pwc:CarbonBlotter.GridLinesBorderThickness), RelativeSource={RelativeSource Self}}"/> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ig:CellValuePresenter}"> 
      <igw:CardPanel> 
       <Border x:Name="MainBorder" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Padding="4"/> 
         ... 

И у меня есть некоторые пользовательские шаблоны, которые основаны на шаблоне по умолчанию

<Style x:Key="_columnStyle" TargetType="{x:Type ig:CellValuePresenter}" BasedOn="{StaticResource {x:Type ig:CellValuePresenter}}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate> 
     <Border BorderBrush="{TemplateBinding BorderBrush}" Margin="{TemplateBinding Margin}" BorderThickness="{TemplateBinding BorderThickness}"> 
     <pwc:BlotterCashTradingLanguageBar/> 
     </Border> 
     ... 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style>  

И в зависимости от имени столбца стандартный или настраиваемый шаблон будет применяется. И я обнаруживаю, что при первом запуске представления столбцы с шаблоном по умолчанию не имеют пограничных линий, но если я изменил представление, добавив несколько столбцов, представление будет обновлено, а все столбцы будут иметь линии сетки.

Похоже, что шаблон по умолчанию не выбирает значение из прикрепленных свойств, когда представление загружается в первый раз.

Любые идеи.

ответ

0

Хмм, его странно, пытался установить прикрепленные свойства из разных мест OnLoad, OnRender, из производного класса с использованием Property Override, ничего не работало.

Создал новый стиль с ключом, создавая его на основе стиля по умолчанию. В тех случаях, когда пользовательский стиль не используется, этот новый стиль. И это работает.