の を変更することRowStyle
でDataGrid
、マウスが行の上に置かれたときに行の最後にいくつかのボタンを表示するカスタマイズされたグリッドを作成しました。
DataGridRow
デフォルトのスタイルに基づいて新しいスタイルを作成しました。次に、XAML を変更してボタンを a 内に追加しましたStackPanel
(詳細は省略)。
<UserControl.Resources>
<Style x:Key="DataGridRowStyle" TargetType="swcd:DataGridRow">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="swcd:DataGridRow">
...
<StackPanel x:Name="RowControlsPanel">
<Button>
... these are the buttons displayed on the row
は次のDataGrid
スタイルを使用して変更されます。
<swcd:DataGrid RowStyle="{StaticResource DataGridRowStyle}">
...
</swcd:DataGrid>
同様の方法で別のグリッドを作成したいのですが、行の最後に異なるボタンのセットがあります。スタイルのテキスト コピーを作成し、それに応じて変更することもできましたが、適切な再利用可能なクラスを作成できることを望んでいました。スタイルから除外したいものはスタイル内のコントロール (ボタン) のコレクションであるため、これにアプローチする方法がわかりません。
これまでの私のアプローチは、MyDataGrid
から派生したクラスを作成することDataGrid
です。次のようにインスタンス化できるように、新しいプロパティRowControls
を追加しました。MyDataGrid
<local:MyDataGrid>
<local:MyDataGrid.RowControls>
<Button>
... these controls should go at the end of the row
</local:MyDataGrid.RowControls>
...
</local:MyDataGrid>
MyDataGrid
RowStyle
上記のようにa を使用します。MyDataGrid.RowControls
しかし、コレクションの内容はどのようにしてスタイルContent
の中に入るのでしょうか? のRowControlsPanel
でそれを行うべきだと思いますが、から新しいクラスを派生させる必要があります。残念ながら、ハードコーディングされているようで、独自の派生行クラスを挿入することはできません。再利用の問題に別の方法で取り組む必要があると感じていますが、どうすればよいかわかりません。OnApplyTemplate
DataGridRow
MyDataGridRow
DataGridRow
DataGrid
DataGridRow
DataGrid
新しいプロパティを追加してコントロール テンプレートを変更することにより、ボタンのような単純なコントロールをカスタマイズするのは非常に簡単ですが、カスタマイズする必要があるテンプレートがグリッド内にネストされているような複雑なコントロールをカスタマイズするにはどうすればよいでしょうか?