c# создание - Как создать стиль на основе стиля DataGrid по умолчанию?





wpf style (3)


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

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

У меня есть пользовательский элемент управления, который расширяет 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>

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




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

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

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

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




foreach (Suit suit in Enum.GetValues(typeof(Suit))) { }

Я слышал смутные слухи, что это происходит медленно. Кто-нибудь знает? - Orion Edwards 15 окт в 1:31 7

Я думаю, что кеширование массива значительно ускорит его. Похоже, вы каждый раз получаете новый массив (через отражение). Скорее:

Array enums = Enum.GetValues(typeof(Suit));
foreach (Suit suitEnum in enums) 
{
    DoSomething(suitEnum);
}

Это хотя бы немного быстрее, а?





c# wpf datagrid styles