2016-06-14 8 views
0

2行2列の単純なWPFグリッドがあります。 2番目の列には、いくつかのビューモデルのプロパティにバインドされているTextBox-esが含まれています。問題ボックスの真上に検証エラーを表示するには、これらのTextBoxes検証のErrorTemplatesをカスタマイズする必要があります。エラーメッセージが視覚的に行の上に重なったときにコードWPF検証エラーテンプレート表示の問題

<Style TargetType="Control" x:Key="ValidationControlStyle"> 
    <Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 
     <ControlTemplate> 
     <StackPanel> 
      <TextBlock Foreground="Red" 
        Text="{Binding ElementName=ErrorAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/> 
      <AdornedElementPlaceholder x:Name="ErrorAdorner"/> 
     </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

は非常に醜い結果を提供します(下図を参照)私は(だけの問題でフィールド上の検証エラーを配置することができますどのように

enter image description here

グリッドの行の高さを増やす必要があります)?

+0

はたぶんメインUIレイヤでの検証のTextBlockを置きたい場合は、あまりにもそれが一般的なようにするいくつかの方法があります確信している

<Style x:Key="ErrorTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="Visibility" Value="False" /> <Setter Property="Foreground" Value="Red" /> <DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Validation.HasError" Value="True"> <Setter Property="Visibility" Value="True"/> </DataTrigger> </Style> 

バインディング構文は次のようなものでなければなりません'Validation.HasError'に基づいてDataTriggerを使用して可視性を設定しますか?私は正確なバインディングの構文を覚えていませんが、[この回答](http://stackoverflow.com/a/8978041/302677)は動作するはずです。 – Rachel

+0

@レイチェル、はい、まさに私が最後にしたことです。してください、質問に答えると私は答えとしてあなたのアドバイスをマークします。ありがとうございました! –

答えて

0

メインUIレイヤーに検証TextBlockを配置し、Validation.HasErrorを基にしたDataTriggerを使用してVisibilityを設定しますか? 、私はあなたが:)