2

の を変更することRowStyleDataGrid、マウスが行の上に置かれたときに行の最後にいくつかのボタンを表示するカスタマイズされたグリッドを作成しました。

カスタム データグリッド

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>

MyDataGridRowStyle上記のようにa を使用します。MyDataGrid.RowControlsしかし、コレクションの内容はどのようにしてスタイルContentの中に入るのでしょうか? のRowControlsPanelでそれを行うべきだと思いますが、から新しいクラスを派生させる必要があります。残念ながら、ハードコーディングされているようで、独自の派生行クラスを挿入することはできません。再利用の問題に別の方法で取り組む必要があると感じていますが、どうすればよいかわかりません。OnApplyTemplateDataGridRowMyDataGridRowDataGridRowDataGridDataGridRow

DataGrid新しいプロパティを追加してコントロール テンプレートを変更することにより、ボタンのような単純なコントロールをカスタマイズするのは非常に簡単ですが、カスタマイズする必要があるテンプレートがグリッド内にネストされているような複雑なコントロールをカスタマイズするにはどうすればよいでしょうか?

4

1 に答える 1

2

再利用可能なクラスを作成する代わりに、Silverlight 3 BasedOn スタイルでスタイルを再利用することを検討してください。

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/03/18/Silverlight-3-1320-BasedOn-Styles.aspx _ _

この手法により、例の行ボタンを既存のスタイルに変更するなど、小さな変更を加えることができます。

于 2009-08-19T20:37:50.193 に答える