2009-07-29 14 views
3

UserControlには他のコントロールがあり、TextBoxがあります。 ValueプロパティはTextBoxテキストにバインドされており、ValidatesOnDataErrorsはTrueに設定されています。WPFの別のコントロールに検証エラーテンプレートを表示

Valueプロパティバインディングで検証エラーが発生すると、UserControlのまわりにエラーテンプレート(標準の赤い枠線)が表示されます。

TextBoxの周りに表示する方法はありますか? 私は任意のエラーテンプレートを使用することができますので、単にテキストボックスの周りに境界線を置き、その色や何かをValidation.HasErrorにバインドすることはオプションではありません。

ここに私のコードです:

<DataTemplate x:Key="TextFieldDataTemplate"> 
    <c:TextField DisplayName="{Binding Name}" Value="{Binding Value, Mode=TwoWay, ValidatesOnDataErrors=True}"/> 
</DataTemplate> 

<controls:FieldBase x:Name="root"> 
<DockPanel DataContext="{Binding ElementName=root}"> 
    <TextBlock Text="{Binding DisplayName}"/> 
    <TextBox x:Name="txtBox"     
      Text="{Binding Value, Mode=TwoWay, ValidatesOnDataErrors=True}" 
      IsReadOnly="{Binding IsReadOnly}"/> 
</DockPanel> 

ユーザーコントロール(FieldBaseは)検証を実行のModelViewに結合するよりも、です。

答えて

2

このタスクを達成するにはこのソリューションを使用しました。コンバーターを使用して、(Validation.Errors).CurrentItemをThicknessに変換することで、境界線を「隠す」。

<Grid> 
    <Grid.Resources> 
     <data:ValidationBorderConverter 
      x:Key="ValidationBorderConverter" /> 
    </Grid.Resources> 
    <Border 
     BorderBrush="#ff0000" 
     BorderThickness="{Binding 
      ElementName=myControl, 
      Path=(Validation.Errors).CurrentItem, 
      onverter={StaticResource ValidationBorderConverter}}"> 
     <TextBox 
      ToolTip="{Binding 
       ElementName=myControl, 
       Path=(Validation.Errors).CurrentItem.ErrorContent}" /> 
    </Border> 
</Grid> 

ValidationBorderConverterクラスは非常に単純です:

[ValueConversion(typeof(object), typeof(ValidationError))] 
public sealed class ValidationBorderConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
      System.Globalization.CultureInfo culture) 
    { 
     return (value == null) ? new Thickness(0) : new Thickness(1); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
      System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
関連する問題