我的 WPF 应用程序中有一个文本框。我定义了一个用于验证错误的 ControlTemplate,如下所示:
<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 的内容。我正在验证文本框。现在我想在代码后面设置文本框的错误模板,但我无法做到这一点!
我尝试了这个,但它没有按预期工作::
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:我想知道如何从代码中设置控件模板的错误消息。例如,我想将默认错误消息“无效输入:”更改为“无效输入:请输入正确的输入”。
我只想在代码后面做上述事情!!!!
EDIT 1:
问题是我如何从 Validation.HasError 后面的代码设置为 true,因为我没有使用任何验证器。 (或者我应该从应用 ValidationTemplate 背后的代码中设置什么??))
EDIT 2:
我正在进行 XML 绑定,所以我无法实现 IDataErrorInfo!我只想从代码后面实现这一点!有没有办法从代码后面设置 Validation.HasError ?