標準のWPF DataGrid
から派生したカスタムのDataGrid
コントロールを開発しており、クライアント固有のニーズに合わせて拡張しています。カスタムDataGridコントロールのサブコントロールのデフォルトスタイル
私.cs
ファイルの抜粋:私の.xaml
ファイルの
public class DataGrid : System.Windows.Controls.DataGrid
{
#region Constructor
static DataGrid()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DataGrid),
new FrameworkPropertyMetadata(typeof(DataGrid)));
}
}
スニペット:
<Style TargetType="local:DataGrid"
BasedOn="{StaticResource ResourceKey={x:Type DataGrid}}">
Style
タグにx:Key
を使用していないことでは、私は、コントロールの既定一つとして、このスタイルを宣言します。これは私の期待通りに機能します。私は得ることはありません何
は私が正しくDataGridRow
、DataGridColumn
またはDataGridColumnHeader
のように、DataGrid
で使用されているサブコントロールのデフォルトスタイルを宣言する方法です。
一つの方法は...このよう
<Style TargetType="{x:Type DataGridRow}">
それを宣言することです...そして(それ以外の場合は、まだいくつかの理由のための標準的なWPFのスタイルを使用しています(明示的に私のlocal:DataGrid
のCellStyle
を設定しますか? ))
<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}}">
デフォルトスタイルとしてそれを宣言することの欠点は、クライアントが標準WPF DataGrid
を使用している場合、デフォルトのスタイルが私のカスタムDataGrid
によって上書きされていることです。
別の方法は...私のDataGridCell
スタイルを指定するときにx:Key
属性を使用することです
<Style x:Key="DataGridCellStyleKey" TargetType="{x:Type DataGridCell}">
...とlocal:DataGrid
このキー
<Setter Property="CellStyle" Value="{StaticResource {x:Type DataGridCell}}" />
に自分の
CellStyle
を設定します
この方法では、既定のスタイルをオーバーライドしませんが、クライアントがCellStyleをローカルで変更する場合は、明示的x:Key
をフェレンス:
<local:DataGrid>
<local:DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyleKey}">
私はシンプルさと保守性の理由からx:Key
を参照し、それらを避けたいと思います。
:ハードコードされたx:Key
文字列を参照する必要性を回避するために、デフォルトのスタイルとしてRow/CellStyles
を設定するだけでなく、標準のデフォルトのスタイルをオーバーライド避けますWPF DataGrid
。私が考えることができる唯一の他の解決策はDataGridCell
と他のサブコントロールのカスタムコントロールを使用することです。これは実行可能なソリューションですか?
XAMLでカスタムDataGridを作成するときに、ユーザーが自分の標準スタイルをどのように拡張できるかわかりません。 '' Style TargetType = "DataGridCell" BasedOn = "{StaticResource {x:Type DataGridCell}}">を使用して、標準のWPF DataGridを参照していますが、カスタムDataGridスタイルを基にしてください。 –
これで、ユーザーは新しいスタイルだけを簡単に設定できます。 Cellstyleを基本として使用することはできません。 BasedOn = "{StaticResource {x:Type DataGridCell}}"を使用すると、型から基本スタイルを参照できます。カスタムDataGridはDataGridCellの新しい型を提供しないため、カスタムDataGrid CellStyleとグローバルなもの(これらのスタイルはDataGridから独立しています)を決める方法はありません。 – WPFGermany