问题描述
在以下代码中,我使用ValidationRule来验证TextBox
上的用户输入。它工作正常。如果用户输入无效的数据(任何非字母字符),它将在文本框的左侧显示一个红色的小!
符号,并且如果将鼠标悬停在文本框上,它将显示一条无效的数据消息(如图所示)下面)。
问题:我们如何修改以下代码,以便-instead of tooltip
,无效数据消息显示在文本框正下方?
备注:我尝试在下面XAML的以下行<Setter Property="ToolTip"
中用TexBlock替换ToolTip,并在文本框TexBox下方放置一个文本块,如下所示:<TextBlock Text="{Binding (Validation.Errors)[0].ErrorContent,ElementName=txtTest}"/>
。但是(按预期方式)它没有用,因为TextBlock当然不是TextBox的属性
MyDataSource.cs :
public class MyDataSource
{
public MyDataSource()
{
}
public string FirstName { get; set; }
}
AlphabetsOnlyValidationRule :
public class AlphabetsOnlyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,CultureInfo cultureInfo)
{
string sVal = value as string;
if (string.IsNullOrEmpty(sVal))
{
return new ValidationResult(false,"Please enter some text");
}
if (!sVal.ToList().All(t => char.IsLetter(t)))
{
return new ValidationResult(false,"First Name should contains alphabets only");
}
return new ValidationResult(true,null);
}
}
MainWindow.xaml :
<Window.Resources>
<local:MyDataSource x:Key="Ods"/>
<local:AlphabetsOnlyValidationRule x:Key="AlphabetsOnlyKey"/>
<ControlTemplate x:Key="ValidationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
<Style x:Key="TextBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox x:Name="txtTest" Margin="48,572,388" Style="{StaticResource TextBoxInError}" Validation.ErrorTemplate="{StaticResource ValidationTemplate}">
<TextBox.Text>
<Binding Path="FirstName" Source="{StaticResource Ods}" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:AlphabetsOnlyValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
验证消息的屏幕截图 [当用户输入非字母字符时]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)