3

私は 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"て使うことができますか??

4

1 に答える 1

4

あなたのvalidationTemplateStyleTemplateTemplate代わりに試してください:

<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>
于 2013-02-27T17:09:26.473 に答える