Gur*_*ruC 10 validation wpf textbox code-behind controltemplate
我的WPF应用程序中有一个TextBox.我已经为验证错误定义了一个ControlTemplate,如下所示:
<ControlTemplate x:Key="validationTemplate">
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Bottom" Text="Invalid Input: "></TextBlock>
<AdornedElementPlaceholder />
</DockPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
我的TextBox如下:
<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}">
<TextBox.Text>
<Binding Path="TEXT1" ValidatesOnDataErrors="True" validatesOnExceptions="True">
</Binding>
</TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)
现在,如果我的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
}
Run Code Online (Sandbox Code Playgroud)
问题1:我想知道如何将错误模板添加到TextBox
问题2:我想知道如何从代码中设置控件模板的错误消息.例如,我想将默认错误消息"Invalid Input:"更改为"Invalid Input:请输入正确的输入".
我想在代码背后做上面提到的事情!!!!
编辑1:
问题是如何从Validation.HasError后面的代码设置为true,因为我没有使用任何Validator.(或者我应该从ValidationTemplate后面的代码设置应该应用什么?))
编辑2:
我正在进行XML绑定,所以我无法实现IDataErrorInfo !! 我想从代码背后实现这一点!! 有没有办法从代码后面设置Validation.HasError?
Fre*_*lad 21
要在代码中设置"Validation.HasError",可以使用Validation.MarkInvalid方法
private void blockTextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
TextBox txtBox = sender as TextBox;
//...
BindingExpression bindingExpression =
BindingOperations.GetBindingExpression(txtBox, TextBox.TextProperty);
BindingExpressionBase bindingExpressionBase =
BindingOperations.GetBindingExpressionBase(txtBox, TextBox.TextProperty);
ValidationError validationError =
new ValidationError(new ExceptionValidationRule(), bindingExpression);
Validation.MarkInvalid(bindingExpressionBase, validationError);
}
Run Code Online (Sandbox Code Playgroud)
取消设置您使用的值
Validation.ClearInvalid
Run Code Online (Sandbox Code Playgroud)
感谢他建议我的精彩链接.我的代码有点像这样
String errorMessage = GetFormattedErrorMessage(toolTip.Range, range);
ValidationError validationError = new ValidationError(new DummyValidator(),
txtBox.GetBindingExpression(TextBox.TextProperty));
Validation.MarkInvalid(txtBox.GetBindingExpression(TextBox.TextProperty), validationError);
validationError.ErrorContent = errorMessage;
Validation.SetErrorTemplate(txtBox, GetErrorTemplate(errorMessage));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14035 次 |
最近记录: |