2017-08-09 2 views
0

私は変態だと知っていますが、私は非常に興味があります。カスタムコントロールを作成して基本クラススタイルを最初に見つけ出し、それが自分のものです。 私が尋ねる理由:カスタムアイテムテンプレートを持つTreeViewの派生コントロールがあります。私はそれらのテンプレートを適用し、私は基本スタイルを持っています。後で私はいくつかのカラーパレットを適用するかもしれません。最後のステップで私は問題があります。私は2つのスタイルを適用する必要があります。 PVStructuralTreeはTreeViewから派生し、コード内のリソースに挿入されるいくつかのDependencyProperty DataTemplatesを持っています。WPFスタイルと多相形

PVStructuralTreeView

  • EmploeeTemplate
  • ...複数のテンプレートPVStructuralTreeViewため

デフォルトのスタイル:TreeViewコントロールのための

<Style x:Key="DefaultPVStructuralTreeView" TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultTreeView}"> 
    <Setter Property="EmploeeTemplate"><!-- This get inserted inro Resources in code --> 
     <Setter.Value> 
      <DataTemplate DataType="{x:Type s:Emploee}"> 
       ... 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    ... Lots of them here 
</Style> 
<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultPVStructuralTreeView}"/> 

デフォルトスタイル(それはかなり大きいですので、私ここに投稿しません):

私はこの+同時に両方のスタイルを適用するためにいくつかの魔法(Generic.xamlから一つをテーマにした)を持っているしたいのですが、カラーtemplate.xamlファイルで
<Style TargetType="{x:Type TreeView}" BasedOn="{StaticResource DefaultTreeView}"/> 

<Style x:Key="ThemedTreeView" TargetType="{x:Type TreeView}" BasedOn="{StaticResource DefaultTreeView}"> 
    ... 
</Style> 

<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource ThemedTreeView}"/> 

しかし、それだけでgeneric.xamlスタイルを上書きします。私はそれを追加したい。

は今、私はこの方法をやっている:

<Style x:Key="ThemedPVStructuralTreeView" TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource DefaultPVStructuralTreeView}"> 
    ... CopyPaste from ThemedTreeView ... 
</Style> 

<Style TargetType="{x:Type c:PVStructuralTreeView}" BasedOn="{StaticResource ThemedPVStructuralTreeView}"/> 

誰もがここでThemedTreeViewスタイルを再利用する仕方を知っていますか?

+0

は完全に一般的なスタイルを上書きします。私は上書きしないで、その上に構築したい。私は、既存の上に構築したいときに、ThemeTreeViewスタイルをtemplate.xamlのPVStructuralTreeViewのスタイルにコピーします。コードをコピーしないでください。 –

+0

他の2つのスタイルでスタイルを設定することはできません。 – mm8

答えて

0

別に(1のみを!)StyleをベースにすることができますStyleBasedOnプロパティを使用して、特定のプロパティをオーバーライドしていますが、別のテンプレートにDataTemplateControlTemplateをベースにすることはできません。これはサポートされていません。テンプレートは、全体として定義する必要があります:私はここに書いた何

WPF: Is there a way to override part of a ControlTemplate without redefining the whole style?

+0

派生スタイルでテンプレートを変更することはできません。追加のプロパティのみを設定することも、ベーススタイルによって設定されたプロパティを上書きすることもできます。だからあなたの現在の質問は何ですか? – mm8

+0

PVStructuralTreeはTreeViewから派生し、コードビハインドのリソースに挿入されるDependencyProperty Templatesがいくつかあります。 –

+0

はい、私はtemlatesについて知っています。他の2つのスタイルをベースにするトリッキーな方法がある場合、私は興味がありました。そうでなければ、私は私のCopyPasteの方法に固執します。 –