我一直在寻找StackOverflow,并且已经完成了几个问题。但它们不起作用。
我有PasswordBox
:
<PasswordBox Width="160"
HorizontalAlignment="Left"
Margin="10,3"
Name="textBoxUserPass"
local:PasswordBoxAssistant.BindPassword="True"
local:PasswordBoxAssistant.BoundPassword="{Binding Path=Password, UpdateSourceTrigger=Explicit,
ValidatesOnDataErrors=True, ValidatesOnExceptions=True}"
Validation.ErrorTemplate="{x:Null}" />
我首先设置ValidationErrorTemplate="{x:Null}"
,因此我第一次加载PasswordBox
时不会尝试验证该框。
当我发现错误时,我会尝试更改Validation.ErrorTemplate
,以便显示红色边框(如我所定义的ErrorTemplate
),如下所示:
BindingExpression bePassword = textBoxUserPass.GetBindingExpression(PasswordBoxAssistant.BoundPassword);
if (bePassword != null)
{
bePassword.UpdateSource();
if (bePassword.HasError)
{
var validationError = new ValidationError(new ExceptionValidationRule(), bePassword);
Validation.MarkInvalid(bePassword, validationError);
validationError.ErrorContent = Cultures.Resources.MessageNoPassword;
var b = Resources["validationTemplate"] as ControlTemplate;
Validation.SetErrorTemplate(textBoxUserPass, b);
}
}
}
我在ResourceDictionary.xaml
上定义了我的 validationTemplate ,如下所示:
<Style x:Key="validationTemplate" TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right"
Foreground="Red"
FontSize="12pt">
*
</TextBlock>
<Border BorderBrush="Red" BorderThickness="1" CornerRadius="5">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
正常的方框,如你所见。
我的问题来自尝试查找此资源以更改后面代码中的Validation.ErrorTemplate
。我放了一个断点,这一行:
var b = FindResource("validationTemplate") as ControlTemplate;
表示 b 为空。我如何找到"validationTemplate"
并使用它?
答案 0 :(得分:3)
您的validationTemplate是Style
,Template
。请尝试Template
:
<ControlTemplate x:Key="validationTemplate">
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right"
Foreground="Red"
FontSize="12pt">
*
</TextBlock>
<Border BorderBrush="Red" BorderThickness="1" CornerRadius="5">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>