2015-11-19 2 views
0

J'ai une boîte de mot de passe, mais j'ai aussi un bloc de texte comme texte de conseil dans le modèle de contrôle. Je voudrais que ceci soit enlevé quand la boîte de mot de passe a une valeur. J'ai essayé ceci ci-dessous mais cela ne fonctionne pas, comment je peux faire ceci?check PasswordBox Value WPF

XAML simplifié:

<PasswordBox Height="20" Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" Style="{DynamicResource PasswordBoxStyle1}"/> 

<Style x:Key="PasswordBoxStyle1" TargetType="{x:Type PasswordBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type PasswordBox}"> 
       <Border x:Name="Border" .. > 
        <StackPanel ..> 
         <TextBlock x:Name="LabelTextBlock" ... 
          Text="Password Label" /> 
         <Grid> 
          <ScrollViewer x:Name="PART_ContentHost" 
           Focusable="false" 
           HorizontalScrollBarVisibility="Hidden" 
           VerticalScrollBarVisibility="Hidden"/> 
          <TextBlock x:Name="HintTextBlock" 
           Focusable="False" 
           IsHitTestVisible="False" 
           Opacity="0" 
           Text="Enter Your Password" /> 
         </Grid> 
        </StackPanel> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

code Derrière:

private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e) 
{ 
    if (pwdBox.SecurePassword.Length == 0) 
    { 
     HintTextBlock.IsVisible = true; 
    } 
    else 
    { 
     HintTextBlock.IsVisible = false; 
    } 
} 

Il dit que le nom 'HintTextBlock n'existe pas dans le contexte actuel'

+0

Quel est le problème avec votre code? –

+0

Pouvez-vous clarifier ce que vous entendez par «ne fonctionne pas»? Avez-vous une erreur de compilation, ne disparaît-elle pas correctement, etc? – Rachel

+0

Il dit que le nom 'HintTextBlock n'existe pas dans le contexte actuel - désolé je suis nouveau à wpf. –

Répondre

1

Depuis, la zone de texte HintTextBlock est partie du modèle de PassworkBox donc il ne peut pas accéder directement car il ne fait pas partie du contrôle direct de la fenêtre. Utilisez le FindName pour trouver le contrôle dans le modèle de passwordbox.

TextBlock hintTextBlock = pwdBox.Template.FindName("HintTextBlock", pwdBox) as TextBlock; 
if (pwdBox.SecurePassword.Length == 0) 
    { 
     hintTextBlock.Visiblility = Visiblitity.Visible; 
    } 
    else 
    { 
     hintTextBlock.Visiblility = Visiblility.Collapsed; 
    } 
+0

Merci, j'obtiens maintenant une erreur en disant 'isvisible ne peut pas être assigné à - il est en lecture seule' –

+0

Vous devez utiliser la propriété Visibility au lieu de IsVisible. J'ai mis à jour ma réponse. – user1672994

+0

Cela ne fonctionne pas non plus, erreur similaire .. est-il possible d'utiliser l'opacité? –