Как создать стиль на основе стиля DataGrid по умолчанию? - PullRequest
25 голосов
/ 13 февраля 2011

У меня есть пользовательский элемент управления, который расширяет DataGrid. Это называется ExtendedDataGrid. Я хочу предоставить стиль для ExtendedDataGrid, который совпадает со стилем DataGrid, за исключением изменения шаблона Я пробовал что-то вроде этого:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
    <Setter Property="Template">
    ...
    </Setter>
</Style>

Но там написано, что ресурс не найден.

Итак, я стараюсь:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {ComponentResourceKey ResourceId=DataGridStyle, TypeInTargetAssembly={x:Type DataGrid}}}">
    <Setter Property="Template">
    ...
    </Setter>
</Style>

Но это тоже не работает ... Так что мне делать?

Ответы [ 2 ]

48 голосов
/ 13 февраля 2011

Ну, загадка разгадана:)

Мой первый код выше действительно работает:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
    <Setter Property="Template">
    ...
    </Setter>
</Style>

Я думал, что это не работает, потому что VS (или Resharper) показал ошибку в моем коде, говоря, что ресурс не найден ... Ошибка в VS (или Resharper): (

2 голосов
/ 13 февраля 2011

Если вы создаете стиль со свойством TargetType и основываете его на другом стиле, который также определяет свойство TargetType, целевой тип производного стиля должен быть таким же или быть производным от типа базового стиля.

Ваша сетка наследуется от DataGrid, верно?

...