2017-06-21 15 views
4

PasswordBoxの検証中にAdornedElementPlaceholderにエラーメッセージを表示する方法はありますか? 、WPFでPasswordBoxを検証する

<ControlTemplate x:Key="DefaultErrorTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <AdornedElementPlaceholder x:Name="placeholder" /> 
     <Border Background="Red" 
       ToolTip="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
       ToolTipService.InitialShowDelay="0" 
       VerticalAlignment="Top" 
       Margin="3" 
       Width="20" 
       Height="20" 
       CornerRadius="10"> 
      <TextBlock Text="!" 
         Foreground="White" 
         FontWeight="Bold" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" /> 
     </Border> 
    </StackPanel> 
</ControlTemplate> 

とその検証

<Style TargetType="Control" 
      x:Key="ControlBaseStyle"> 
     <Setter Property="Validation.ErrorTemplate" 
       Value="{StaticResource DefaultErrorTemplate}" /> 

を使用して、私のBaseControlStyleイムイム、それは私が(コンボボックス、DateTimePickerのを持っているほとんどすべてのコントロールと魔法のように働いている:

私はこのような何かを持っていますTextBox)しかし、私はpasswordBoxのために同じスタイルを使用したい場合、それは動作しません。

enter image description here これはsimpe TextBoxでは機能していますが、PasswordBoxでは機能していないことがわかります。私はにフィードバックを与えることをpasswordBoxと同じことを達成するためにwan'tそれは、ユーザー名プロパティに

[Required(ErrorMessage = "Please enter username.")] 

をエラーメッセージを示すのIそのAdornedElementPlaceholder

ツールチップにそれを表示するには、エラーメッセージを抽出する方法がわかりませんユーザーがパスワードを入力する際のエラー(制約)について

本当にありがとうございます。事前に

感謝:)

EDIT:

私は

[Required(ErrorMessage = "Please enter password.")] 
[RegularExpression(@"^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$")] 
[StringLength(maximumLength: 15, ErrorMessage = "Minimum 8 and maximum 15 characters.", MinimumLength = 8)] 
public string Password 
{ 
    get { return GetValue<string>(); } 
    set { SetValue(value); } 
} 

とPasswordBoxAssistant

<PasswordBox behaviors:PasswordBoxAssistant.BindPassword="True" 
      behaviors:PasswordBoxAssistant.BoundPassword="{Binding Player.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" 
      FontSize="{StaticResource defaultFontSize}" 
      Grid.Row="2" 
      Grid.Column="1" 
      Margin="10" /> 

となりましたと、そのプロパティにバインドされたパスワードのプロパティのためにこれを使用していますカスタムパスワードボックススタイルBasedOn ControlBaseStyle

<Style TargetType="{x:Type PasswordBox}" 
     BasedOn="{StaticResource ControlBaseStyle}"> 

私はTextBoxと同じことを行っているが、それはPasswordBoxで作業をdoesnt。

情報:そして、私はあなたがこの質問を締めくくった理由を知りたいと思います。これに答えがあったりガイドでさえあれば、私はそれを自分で閉じることができます。もしそうでなければ、投票をする前に答えを教えてください。ありがとう。

+0

passwordboxの検証エラーをどのように設定しますか?それは私のためのカスタムテンプレートを示しています... – grek40

+0

私はどのように私はパスワードにバインドされ、どのような私はPasswordBoxスタイルで行った質問を更新しました。 –

+0

閉じる投票について:*デバッグのヘルプを求める質問(「なぜこのコードは動作していませんか?")には、目的の振る舞い、特定の問題またはエラー、および問題そのものを再現するのに必要な最短コードが含まれていなければなりません。検証可能な例*あなたの例は確かに完全ではありませんでした(そして依然としてそうではありません) – grek40

答えて

0

私は答えを見つけました。 は

<Style TargetType="Control" 
     x:Key="ControlBaseStyle"> 
    <Setter Property="Validation.ErrorTemplate" 
      Value="{StaticResource DefaultErrorTemplate}" /> 

を変更したときにトリガ内部aparentlyそれだけで働いて

<Trigger Property="Validation.HasError" 
     Value="True"> 
    <Setter Property="Validation.ErrorTemplate" 
      Value="{StaticResource DefaultErrorTemplate}" /> 

内側に入れていた、とのTextBoxには、デフォルトのようにしてトリガー内部の作業を行うことができます。

+0

これは本当に変です...私はこれについて多くの理由を想像することはできません。 'Behaviors:PasswordBoxAssistant.BindPassword'の後ろで奇妙な実装になります。エラーテンプレートをどこかに割り当てると、これは実際には通常の設定の前に優先されるかもしれません... – grek40