0

バインディングが間違った入力を提示すると、コントロールの周りに赤い境界線が表示されることがあります。どこで、どのように変更できますか? 可能であれば、例を挙げてください。

前もって感謝します。

4

3 に答える 3

2

TextBox に対してこのようなことができます

<Style x:Key="TextBoxWithValidation" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource TextBoxValidationTemplate}"/>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Background" Value="{StaticResource BackgroundValidationBrush}"/>
            <Setter 
                Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self},
                Path=(Validation.Errors)[0].ErrorContent)}"
            />
        </Trigger>
    </Style.Triggers>
</Style>

BackgroundValidationBrush はピンクと言います。

ToolTip を (Validation.Errors)[0].ErrorContent にバインドする一般的な解決策では、エラーがないときに大量のデバッグ スピュー (専門用語) が発生することに注意してください。したがって、次のようなコンバーターを使用することをお勧めします。

[ValueConversion(typeof(ReadOnlyObservableCollection<ValidationError>), typeof(string))]
public class ValidationErrorsToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        var errors = value as ReadOnlyObservableCollection<ValidationError>;

        // If there are no errors then return an empty string. 
        // This prevents debug exception messages that result from the usual Xaml of "Path=(Validation.Errors)[0].ErrorContent".
        // Instead we use "Path=(Validation.Errors), Converter={StaticResource ValidationErrorsConverter}".
        if (errors == null)
        {
            return string.Empty;
        }

        var errors2 = errors.Select(e => e.ErrorContent).OfType<string>().ToArray();

        return errors.Any() ? string.Join("\n", errors2) : string.Empty;
    }
    public object ConvertBack(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

そして、私たちが使用できる

<converters:ValidationErrorsToStringConverter x:Key="ValidationErrorsConverter"/>

<!-- Style to be used as the base style for all text boxes -->
<Style x:Key="TextBoxWithValidation" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource TextBoxValidationTemplate}"/>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Background" Value="{StaticResource BackgroundValidationBrush}"/>
            <Setter 
                Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self},
                Path=(Validation.Errors),
                Converter={StaticResource ValidationErrorsConverter}}"
            />
        </Trigger>
    </Style.Triggers>
</Style>
于 2012-04-06T19:39:02.237 に答える
0

スタイルに添付プロパティを設定Validaton.ErrorTemplateしますTextBox。(例についてはドキュメントを参照してください)

于 2012-04-06T19:22:59.180 に答える
0

次のようなものを探していると思います

データ検証

スニペットを使用できます:

<Binding.ValidationRules>
   <DataErrorValidationRule/>
</Binding.ValidationRules>

検証ルールを定義します。失敗した場合、関連するコントロールの周りに赤い四角形が表示されます。

于 2012-04-06T19:20:22.740 に答える