2011-07-09 35 views
0

このanswerに記載されているものを実装しようとしています。私は検証警告とエラーのために一つのテンプレートを持っていたいと思います。私はそれがこのようなスタイルのトリガーにValidation.ErrorTemplateに結合することによって考え出したと思っていた:xamlのErrorContentに基づいてValidation.ErrorTemplateを動的に変更する方法

<Style TargetType="TextBox"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="Validation.ErrorTemplate" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource ValidationTemplateConverter}, Path=(Validation.Errors)[0].ErrorContent}" ></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

コンバータは単にErrorContentから鍵を取り、正しいテンプレートのResourceDictionary内のルックアップを行います。 Validation.ErrorTemplateへの結合が許可されていないため、残念ながら、これは動作しません - 他のArgumentException

'ErrorTemplate' property cannot be data-bound. 
Parameter name: dp 

誰もがこのような何かを実装しようか?

答えて

1

このロジックをDataTemplateSelectorに移動できませんでしたか?私はあなたが束縛されていると仮定しています。ItemsControlの何らかの種類に - ItemsControlは、エラーまたはエラーであるかどうかによってエラー内容を異なる方法で表示するDataTemplateSelectorを持つことができます。

あなただけの最初のエラーを示しているなら、あなたは常にあなたのテンプレートを持っている可能性がContentControlが含まれ、DataBindをValidation.Errors[0]Contentと私はDataTemplateSelectorsに慣れていないんだけど、私は」ContentTemplateSelector

<Style TargetType="TextBox"> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <DockPanel> 
         <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Validation.Errors)" 
           ItemTemplateSelector="{StaticResource ErrorTemplateSelector}" /> 
         <AdornedElementPlaceholder/> 
        </DockPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 
+0

を適用いくつかの研究を行い、試してみてください。ありがとう。 –

+0

@ John Maillet StyleSelectorsとDataTemplateSelectorsを使用すると、適用するスタイルやコントロールテンプレートを動的に選択できるため、記述するシナリオに最適です – cordialgerm

+0

Validation.Errorsに正しくバインドできないようです。 SelectorはItemsControlで決して起動しません。私は代わりにContentControlを入れ、Validation.Errors [0]にバインドしました。 TemplateSelectorが呼び出されますが、SelectTemplateの 'item'パラメータは常にnullです。 –

関連する問題