Я занимаюсь дизайном 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>
И в зависимости от имени столбца стандартный или настраиваемый шаблон будет применяется. И я обнаруживаю, что при первом запуске представления столбцы с шаблоном по умолчанию не имеют пограничных линий, но если я изменил представление, добавив несколько столбцов, представление будет обновлено, а все столбцы будут иметь линии сетки.
Похоже, что шаблон по умолчанию не выбирает значение из прикрепленных свойств, когда представление загружается в первый раз.
Любые идеи.