TreeViewに基づいて再利用可能なカスタムコントロールを作成しています。カスタムコントロールライブラリのDependencyObjectにスタイルを適用する方法
public GridViewColumnCollection Columns
{
get { return (GridViewColumnCollection)GetValue(ColumnsProperty); }
set { SetValue(ColumnsProperty, value); }
}
public static readonly DependencyProperty ColumnsProperty =
DependencyProperty.Register("Columns", typeof(GridViewColumnCollection), typeof(TreeListView), new PropertyMetadata(new GridViewColumnCollection()));
これは私がXAMLの列の束を指定することができます:私は、カスタムコントロールの上に、このようなコントロールの列、のための依存関係プロパティを作成しました。キャッチは、カスタムセルテンプレートを持つために最初の列が必要だということです。しかし
<Style TargetType="{x:Type local:TreeGridViewColumn}">
<Setter Property="CellTemplate">
<Setter.Value>
<DataTemplate>
<Border Background="Black" /> <!-- Just for example -->
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
:
public class TreeGridViewColumn : GridViewColumn
{
}
、その後、カスタムコントロールのためにGeneric.xamlにそれを所望のスタイルを与える:私は、GridViewColumnからクラスを派生させることによって、このような何かをこれにアプローチするつもりでしたスタイルはTreeGridViewColumnのインスタンスには適用されません。私はおそらく追加する必要があることを知っている:GridColumn基本クラスがFrameworkObjectないよう
DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeGridViewColumn), new FrameworkPropertyMetadata(typeof(TreeGridViewColumn)));
は、しかし、私は、これを行うことはできません、それはのDependencyObjectです。カスタムコントロールライブラリで定義されたGridViewColumnの子孫にスタイルを適用するにはどうすればよいですか?
GridViewColumnにスタイルを適用することはできません。これは、FrameworkElementではなく、スタイル可能ではないためです。 Styleプロパティはありません。 – Clemens
@クレメンス:正しい。私はこの質問を書いたときにこれを説明することができたと思います。私は、自分のニーズに合わせてオーバーライドされたCellTemplateを使ってGridViewColumnの派生物を作成しようとしています。 Reflectorを使用してDataGridの列でこれを行う方法(テキスト列など)を見てみましたが、残念ながらデフォルトのテンプレートをコードで手動で作成するようです。彼らのテンプレートは1つまたは2つのフレームワーク要素でしかないので、どちらにしても問題ありません。私のテンプレートはあまりにも複雑すぎて実用的ではないので、別のルートを探す必要があります。 – user3690202