2012-01-16 2 views
3

DataTriggerに基づいて変更するContentTemplateを設定しようとしています。 - しかし、私が達成しようとしているものをトリガーされたコンテンツテンプレート

<ItemsControl ItemsSource="{Binding Path=ExtendedFieldCollection}" ItemTemplate="{StaticResource RequiredFieldsTemplate}" /> 

<!--Where--> 
<DataTemplate x:Key="RequiredFieldsTemplate"> 
    <ContentPresenter> 
     <ContentPresenter.Style> 
      <Style TargetType="ContentPresenter"> 
       <Setter Property="ContentTemplate" Value="{x:Null}"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsRequired}" Value="True"> 
         <Setter Property="ContentTemplate" Value="{StaticResource MyFieldDisplayTemplate}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ContentPresenter.Style> 
    </ContentPresenter> 
</DataTemplate> 

は、単に罰金

<DataTemplate x:Key="RequiredFieldsTemplate"> 
    <ContentPresenter ContentTemplate="{StaticResource MyFieldDisplayTemplate}" /> 

作品を行く:ページをレンダリングしようとすると構文上、これは動作するはずような気がしますが、それはスタックオーバーフローにつながりますフィールドのリストにバインドするだけで、必要なフィールドのみが表示されます。 Visibility = collapsedを使用するだけでは、MyFieldDisplayTemplateのすべてのカスタムコントロールをインスタンス化する際に大きなオーバーヘッドが発生します。私の目標は、必須ではないフィールドにItemsControl内の完全に異なる(空の)コントロールテンプレートを持たせることです。

このトリガーを設定する方法についてのアイデアはありますか?

答えて

8

私はこの質問時につまずくのおかげでそれを考え出し:WPF: How to set the data template trigger for content control?

私はContentControlに使用されなければならない - ないのContentPresenterを。奇妙なことに、2つは同じ方法で使用すると同じように動作しますが、トリガーを使用する場合とはまったく異なります。いつものように多くのことを学ぶ。

<DataTemplate x:Key="RequiredFieldsTemplate"> 
    <ContentControl> 
     <ContentControl.Style> 
      <Style TargetType="ContentPresenter"> 
       <Setter Property="ContentTemplate" Value="{x:Null}"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsRequired}" Value="True"> 
         <Setter Property="ContentTemplate" Value="{StaticResource MyFieldDisplayTemplate}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ContentControl.Style> 
    </ContentControl> 
</DataTemplate> 
関連する問題