Проверьте PasswordBox Значение WPF

У меня есть поле для ввода пароля, но у меня также есть текстовый блок в виде текста подсказки в шаблоне элемента управления. Я хотел бы, чтобы это было удалено, когда поле пароля имеет значение. Я попробовал это ниже, но это не работает, как я могу это сделать?

Упрощенный XAML:

<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>

Код позади:

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

В нем говорится, что имя "HintTextBlock не существует в текущем контексте"

1 ответ

Решение

Так как текстовое поле HintTextBlock является частью шаблона PassworkBox поэтому к нему нельзя получить доступ напрямую, поскольку он не является частью прямого управления окном. Используйте FindName, чтобы найти элемент управления в шаблоне passwordbox.

TextBlock hintTextBlock = pwdBox.Template.FindName("HintTextBlock", pwdBox) as TextBlock;
if (pwdBox.SecurePassword.Length == 0)
    {
        hintTextBlock.Visiblility = Visiblitity.Visible;
    }
    else
    {
        hintTextBlock.Visiblility = Visiblility.Collapsed;
    }
Другие вопросы по тегам