私は 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);
}
}
}
次のように自分のvalidationTemplateResourceDictionary.xaml
を定義した場所:
<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が nullであることを示します。どうやってそれを見つけ"validationTemplate"
て使うことができますか??