我在我的WPF应用程序中有一个TextBox。我已经定义了一个控件模板来验证错误,如下:
<ControlTemplate x:Key="validationTemplate">
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Bottom" Text="Invalid Input: "></TextBlock>
<AdornedElementPlaceholder />
</DockPanel>
</ControlTemplate>
我的文本框如下:<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}">
<TextBox.Text>
<Binding Path="TEXT1" ValidatesOnDataErrors="True" validatesOnExceptions="True">
</Binding>
</TextBox.Text>
</TextBox>
如果我给我的TextBox添加了ValidationRule,然后进行验证,错误模板就可以正确地应用。但由于其他问题,我不能这样做。
所以我必须在PreviewLostKeyboardFocus中验证TextBox的内容。我正在验证TextBox。现在我想在代码后台为TextBox设置错误模板,但是我无法实现它!
我尝试过这个,但它没有按预期工作:
private void blockTextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
TextBox txtBox = sender as TextBox;
txtBox.Template = this.FindResource("validationTemplate") as ControlTemplate;
//this behaves strange; it removes the TextBox and places the ErrorTemplate.
//I want it to behave like the way WPF does internally wherein it places
//the error template around TExtBox
}
问题1:我想知道如何将错误模板添加到TextBox中。
问题2:我想知道如何从代码中设置控件模板的错误消息。例如,我想将默认的错误消息“Invalid Input:”更改为“Invalid Input: Please enter correct input”。
我只想在代码后台执行上述操作!
编辑1:
问题是我如何从代码后台将Validation.HasError设置为true,因为我没有使用任何验证器。(或者我应该如何从代码后台设置才能应用ValidationTemplate?)
编辑2:
我正在进行XML绑定,所以无法实现IDataErrorInfo! 我只想从代码后面实现这一点!!有办法可以从代码后面设置Validation.HasError吗?
IDataErrorInfo
接口(http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.aspx)将绑定到此控件的对象标记为无效。 - decyclonetextBox1.SetValue(Validation.HasErrorProperty, true);
? - decyclone