扩展 TextBox 可防止 ValidationRule 错误工具提示出现 WPF
Extending a TextBox prevents ValidationRule error tooltip from appearing WPF
我是 WPF 和 XAML 的新手,我正在尝试创建一个扩展 TextBox 的自定义 class,以便我可以添加一些属性以更轻松地进行验证设置。验证工作正常。问题是,当我换出 XAML 中的 TextBox 时,新的 TextBox 会更新边框以显示错误,但工具提示不会按预期显示(见下文)。
在下图中,top 的错误工具提示正确显示,但 的工具提示显示错误。
这是 XAML...
<TextBox x:Name="StrTextBox3" Width="200" Height="50">
<TextBox.Text>
<Binding Path="BinaryIntText" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validationRules:StrValidationRule ValidatorType="{x:Static validators:StringValidator.BinaryOnly_Validator}"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<validationRules:ValidatedTextBox x:Name="VText" Width="200" Height="50">
<TextBox.Text>
<Binding Path="BinaryIntText2" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validationRules:StrValidationRule ValidatorType="{x:Static validators:StringValidator.BinaryOnly_Validator}"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</validationRules:ValidatedTextBox>
这里是扩展 class...
class ValidatedTextBox : TextBox
{
public ValidatedTextBox()
{
//
}
}
以及 ValidationRule 的良好衡量标准...
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return ValidatorType.Validate(Convert.ToString(value)).Match (
Right: result => new ValidationResult(true, null),
Left: error => new ValidationResult(false, error));
}
如何启用此功能?我没有初始化一个或两个特定字段吗?我错过了其他电话吗?我是否被样式困扰,或者其他一些比写这篇文章更容易解决的直接问题?
谢谢
原来我很笨;通过简单地扩展文本框,不应用文本框的默认样式,并将新样式设置为现有文本框的样式,或者只是设置,解决了这个问题。
我是 WPF 和 XAML 的新手,我正在尝试创建一个扩展 TextBox 的自定义 class,以便我可以添加一些属性以更轻松地进行验证设置。验证工作正常。问题是,当我换出 XAML 中的 TextBox 时,新的 TextBox 会更新边框以显示错误,但工具提示不会按预期显示(见下文)。
在下图中,top 的错误工具提示正确显示,但 的工具提示显示错误。
这是 XAML...
<TextBox x:Name="StrTextBox3" Width="200" Height="50">
<TextBox.Text>
<Binding Path="BinaryIntText" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validationRules:StrValidationRule ValidatorType="{x:Static validators:StringValidator.BinaryOnly_Validator}"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<validationRules:ValidatedTextBox x:Name="VText" Width="200" Height="50">
<TextBox.Text>
<Binding Path="BinaryIntText2" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validationRules:StrValidationRule ValidatorType="{x:Static validators:StringValidator.BinaryOnly_Validator}"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</validationRules:ValidatedTextBox>
这里是扩展 class...
class ValidatedTextBox : TextBox
{
public ValidatedTextBox()
{
//
}
}
以及 ValidationRule 的良好衡量标准...
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return ValidatorType.Validate(Convert.ToString(value)).Match (
Right: result => new ValidationResult(true, null),
Left: error => new ValidationResult(false, error));
}
如何启用此功能?我没有初始化一个或两个特定字段吗?我错过了其他电话吗?我是否被样式困扰,或者其他一些比写这篇文章更容易解决的直接问题?
谢谢
原来我很笨;通过简单地扩展文本框,不应用文本框的默认样式,并将新样式设置为现有文本框的样式,或者只是设置,解决了这个问题。