Я разрабатываю настраиваемый элемент управления DataGrid
, который основан на стандартном WPF DataGrid
, чтобы расширить его с учетом конкретных потребностей клиента.По умолчанию Стиль субконтроля в пользовательском элементе управления DataGrid
Отрывок из моего .cs
файла:
public class DataGrid : System.Windows.Controls.DataGrid
{
#region Constructor
static DataGrid()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DataGrid),
new FrameworkPropertyMetadata(typeof(DataGrid)));
}
}
Отрывок из моего .xaml
файла:
<Style TargetType="local:DataGrid"
BasedOn="{StaticResource ResourceKey={x:Type DataGrid}}">
не используя x:Key
на Style
теге, я объявляю этот стиль по умолчанию один для управления , Это работает так, как я ожидаю.
То, что я не понимаю, как я правильно объявить по умолчанию стили для субэлементов, которые используются в DataGrid
, как DataGridRow
, DataGridColumn
или DataGridColumnHeader
.
Один из способов заявить об этом, как это ...
<Style TargetType="{x:Type DataGridRow}">
... и установить CellStyle
моего local:DataGrid
явно (в противном случае он все еще использует стандартный стиль WPF по какой-то причине (?))
<Setter Property="CellStyle" Value="{StaticResource {x:Type DataGridCell}}"/>
Когда клиенты используют этот обычай DataGrid
локально, они могут изменить стиль, просто ссылаясь на {x:Type DataGridCell}
, который Я нахожу довольно элегантен:
<local:DataGrid>
<lolcal:DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
Неудобства объявляя его как Default Style является то, что, когда клиенты используют стандартный WPF DataGrid
, Стили по умолчанию будут перезаписаны моим обычаем DataGrid
.
Альтернативный способ заключается в использовании атрибута x:Key
при указании моего DataGridCell
стиля ...
<Style x:Key="DataGridCellStyleKey" TargetType="{x:Type DataGridCell}">
... и установить CellStyle
из моих local:DataGrid
этого ключа
<Setter Property="CellStyle" Value="{StaticResource {x:Type DataGridCell}}" />
Таким образом, я не переопределяю стиль по умолчанию, но когда мои клиенты хотят локально модифицировать CellStyle, они должны повторно Ференц x:Key
явно:
<local:DataGrid>
<local:DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyleKey}">
Я хочу, чтобы избежать их ссылок на x:Key
для простоты и ремонтопригодности причин.
Что я ищу способ, который сочетает в себе лучшее из обоих решений: Установка Row/CellStyles
как стили по умолчанию, чтобы избежать необходимости ссылаться жестко закодированные x:Key
строк, но и избежать переопределения стилей по умолчанию стандарта WPF DataGrid
. Единственное другое решение, о котором я могу думать, это использовать пользовательские элементы управления для DataGridCell
и других суб-элементов управления. Является ли это жизнеспособным решением?
Я просто пробовал это, но не могу понять, как пользователи могут распространять мой стандартный стиль при создании пользовательского DataGrid в XAML. С помощью '