0

Windows Phoneアプリケーションを開発しているので、テキストボックスでのユーザー入力を検証する必要があります。これらのテキストボックスの1つのXAMLは次のとおりです。

<TextBox 
  Name="times" 
  Grid.Row="1" 
  Height="80"
  Text="{Binding UpdateSourceTrigger=Explicit, 
    Mode=TwoWay, 
    Path=orari,
    ValidatesOnDataErrors=True, 
    ValidatesOnExceptions=True, 
    NotifyOnValidationError=true}" 
  TextChanged="TextBoxChangedHandler"  
/>

BreakPointsを使用すると、IDataErrorがエラーを検出すると確信していますが、TextBoxの外観は変わりません。XAMLでValidate.ErrorTemplateを使用する必要があることを読みましたが、このオプションが見つかりません。WindowsPhoneには存在しません。入力が有効でない場合、テキストボックスのスタイルを変更するにはどうすればよいですか?ありがとう

4

1 に答える 1

1

あなたが投稿したものから見分けるのは難しいですが、これはあなたがあなたのエラーを見つけるのを助けるかもしれない非常に似た何かをする私のコードのいくつかの例です。

検証したいテキストボックスで使用されるスタイルは、エラーが発生したときに赤いボックスを取得します。

<Style x:Key="ValidationTextBox" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <Border BorderBrush="Red" BorderThickness="1">
                    <AdornedElementPlaceholder />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip"
              Value="{Binding RelativeSource={RelativeSource Self},
              Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

テキストボックス自体

<TextBox Style="{StaticResource ValidationTextBox}">
    <TextBox.Text>
        <Binding Path="Description" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <rules:MandatoryInputRule ValidatesOnTargetUpdated="True" />
                <rules:IllegalCharsRule ValidatesOnTargetUpdated="True" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

検証ルールの例

class IllegalCharsRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        if (value != null)
        {
            string input = value as string;

            if (input.Contains(",") || input.Contains("/") || input.Contains(@"\") || input.Contains(".") || input.Contains("\"") || input.Contains("'"))
                return new ValidationResult(false, "Validation error. Illegal characters.");
        }

        return new ValidationResult(true, null);
    }
}
于 2012-11-09T16:52:18.690 に答える