2017-01-18 8 views
0

私は別のControlTemplateからControlTemplateを使用するにはどうすればよいですか?

<!-- DERIVED1 - DERIVES FROM 'MOST BASE' --> 
<ControlTemplate TargetType="ContentControl" x:Key="Derived1WidgetControlTemplate"> 
    <GroupBox Style="{StaticResource WidgetControlTemplateStyle}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonDown"> 
       <i:InvokeCommandAction Command="{Binding ExpandCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

     <DockPanel> 
      <!-- Some additional controls go here ... --> 
      <Label Content="Blah blah" /> 

      <DockPanel> 
       <!-- Content ... --> 
       <ContentPresenter /> 
      </DockPanel> 
     </DockPanel> 
    </GroupBox> 
</ControlTemplate> 

<!-- MOST BASE --> 
<ControlTemplate TargetType="ContentControl" x:Key="WidgetControlTemplate"> 
    <GroupBox Style="{StaticResource WidgetControlTemplateStyle}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonDown"> 
       <i:InvokeCommandAction Command="{Binding ExpandCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

     <DockPanel> 
      <!-- Content ... --> 
      <ContentPresenter /> 
     </DockPanel> 
    </GroupBox> 
</ControlTemplate> 

は明らかに2つのテンプレートがほとんど同じであります。繰り返す断片を取り除くために私は何ができますか?

これらを単一のControlTemplateにマージして、依存関係プロパティまたは添付プロパティを渡すことはオプションではありません。2つの区別可能なコントロールテンプレートが必要です。

+0

このインタラクショントリガーは再利用するのが簡単ではありません。私が知る唯一の方法は、このケースのGroupBoxであなた自身のコントロールを作成し、それにスティックすることです。その後、この新しいコントロールを使用するたびに、これがその一部になります。ドックパネルと同様。あなたはいつも鍵付きの2つのドックパネルを持ち、与えられた状況で必要なものを使います。 – adminSoftDK

答えて

0

スタイルとは異なり、はできません。は、ControlTemplateの一部のみを上書きしたり、別のControlTemplateのControlTemplateを基にしたりできません。テンプレート全体を全体として定義(再定義)する必要があります。

あなたは可能何ができ、例えば、ユーザーコントロールをグループボックスと、テンプレートのすべての共通部分を移動し、両方のテンプレートでこのユーザーコントロールを含めることです。

<UserControl x:Class="WpfApplication2.GroupBoxUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WpfApplication2" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <UserControl.Template> 
     <ControlTemplate TargetType="UserControl"> 
      <GroupBox Style="{StaticResource WidgetControlTemplateStyle}"> 
       <ContentPresenter /> 
      </GroupBox> 
     </ControlTemplate> 
    </UserControl.Template> 
</UserControl> 

... 

<ControlTemplate TargetType="ContentControl" x:Key="TemplateA"> 
    <local:GroupBoxUserControl> 
     <TextBlock>1</TextBlock> 
    </local:GroupBoxUserControl> 
</ControlTemplate> 
<ControlTemplate TargetType="ContentControl" x:Key="TemplateB"> 
    <local:GroupBoxUserControl> 
     <TextBlock>2</TextBlock> 
    </local:GroupBoxUserControl> 
</ControlTemplate> 

これとは別に回避するための方法はありませんXAMLのマークアップで同じ要素を2回宣言しなければならないと私は恐れている。

関連する問題