#c# #wpf #datagrid #styles
#c# #wpf #datagrid #стили
Вопрос:
У меня есть пользовательский элемент управления, который расширяется DataGrid
. Это называется ExtendedDataGrid
. Я хочу предоставить стиль для, ExtendedDataGrid
который совпадает со DataGrid
стилем s, за исключением того, что он изменяет шаблон. Я пробовал что-то вроде этого:
<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>
Но это также не работает… Итак, что мне делать?
Ответ №1:
Что ж, загадка решена 🙂
Мой первый приведенный выше код действительно работает:
<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
<Setter Property="Template">
...
</Setter>
</Style>
Я думал, что это не работает, потому что VS (или Resharper) показал ошибку в моем коде, в которой говорится, что ресурс не найден… Ошибка в VS (или Resharper):(
Комментарии:
1. -.- так и думал, вы случайно не используете конструктор?
2. Да, я использую его, почему вы спрашиваете?
3. Поскольку это кусок дерьма, который никто не должен использовать, если у него нет действительно веского оправдания (незнание того, как писать XAML, не является таковым : P), он часто утверждает, что что-то не работает, хотя на самом деле это так.
4. Моим оправданием было бы (в дополнение к тому факту, что я не знаю, как писать XAML), что мне хотелось бы посмотреть, как на самом деле выглядит графический интерфейс, который я разрабатываю.
5. @H.B. Но вот один голос за ваш комментарий, вы правы 🙂
Ответ №2:
Если вы создаете стиль со свойством TargetType и основываете его на другом стиле, который также определяет свойство TargetType, целевой тип производного стиля должен совпадать с типом базового стиля или быть производным от него.
Ваша сетка наследуется от DataGrid, верно?
Комментарии:
1. Было интересно, что бы это могло быть, если не это, поскольку, как вы заметили, это работает.