2011-01-31 3 views
0

У меня есть DataGrid, содержащий некоторые DataGridComboBoxColumns.Как установить стиль comboBox внутри WPF DataGrid?

Я хотел бы, чтобы comboBoxes внутри этих столбцов применял определенный стиль.

поэтому я попытался добавить следующее ресурсов моего DataGrid в:

<Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 

    <Setter Property="Background" Value="{StaticResource DefaultBackgroundBrush}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource DefaultBorderBrush}"/> 
    <Setter Property="Foreground" Value="{StaticResource DefaultForegroundBrush}"/> 
    <Setter Property="FontFamily" Value="{StaticResource DefaultFontFamily}"/> 
    <Setter Property="FontSize" Value="{StaticResource DefaultFontSize}"/> 
    <Setter Property="Padding" Value="2"/> 
</Style> 

ничего не делать вообще.

достаточно удивительно, если я добавлю:

<Style x:Key="{x:Type ComboBoxItem}" TargetType="ComboBoxItem"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="Foreground" Value="Red"/> 
</Style> 

в comboBoxItems внутри один и тот же ComboBoxes получит красный цвет переднего плана Правильно.

так что я не могу установить стиль comboBoxes внутри моего dataGrid, но я могу установить стиль comboBoxItems внутри тех же comboBoxes.

довольно удивительно ...

ли кто-нибудь имеет понятия о том, что здесь происходит, и как я могу решить мою проблему?

спасибо

+0

Я думаю, что определение x: key = type - это ситуации, когда вы вводите новые именованные стили. Они основаны на оригинальном стиле. Но при создании basedon = {staticresource {x: type type}} он будет использовать ваш стиль по умолчанию, то есть тот, который имеет x: key = {x: type type}, а не тот, который предоставляется wpf. –

ответ

1

Что именно это должно делать? x:Key="{x:Type ComboBox}"

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

Edit: Чтобы применить стили к ComboBoxes вы должны настроить свойства DataGridComboBoxCotlumn.ElementStyle и DataGridComboBoxColumn.EditingElementStyle.

+0

см. Там: http://msdn.microsoft.com/fr-fr/library/ms752094%28v=VS.85%29.aspx Я не уверен, что это значит, но я думал, что он сделал то, что вы написали, т.е. : задает данный стиль всем элементам управления типа, указанному в ключевом параметре ... Если кто-то может объяснить, мне бы это понравилось (этот способ выполнения вещей работает вообще для всех элементов управления, кроме вышеупомянутого comboBox (и я сделал это не проверять, но я готов поспорить, что есть одна и та же проблема с столбцами флажков) – David

+0

В стилях x: Key задается неявным образом перезаписывать ключ словаря ресурса элемента управления, поэтому добавление этого не должно ничего менять (в лучшем случае оно будет закручивать его если у вас есть орфографическая ошибка). Прочтите здесь: http://msdn.microsoft.com/fr-fr/library/ms745683%28v=VS.85%29.aspx#styling_targettype –

+0

Обновленный ответ с соответствующее добавление. –

Смежные вопросы