WPF 密码框提示不起作用

问题描述 投票:0回答:2
c# wpf data-binding wpf-controls
2个回答
0
投票

您可以尝试处理PasswordBox的PasswordChanged事件,并根据Password属性是否包含任何字符将其Tag属性设置为“True”或“False”,然后检查触发器中Tag属性的值

在 xaml 上:

    <Style x:Key="PasswordStyle" TargetType="{x:Type PasswordBox}">
            <Setter Property="Tag" Value="False"/>
            <EventSetter Event="PasswordChanged" Handler="OnPasswordChanged"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type PasswordBox}">
                            <Border x:Name="border" CornerRadius="4" BorderBrush="LightGray" BorderThickness="4" Background="Transparent" SnapsToDevicePixels="True">
                                <Grid>
                                    <TextBlock x:Name="PassMessage" HorizontalAlignment="Left" VerticalAlignment="Center" Text="   Password..." FontSize="34" Margin="5,0,5,0" Foreground="LightGray" IsHitTestVisible="False" Visibility="Hidden"/>
                                    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" BorderBrush="Transparent" VerticalScrollBarVisibility="Hidden"/>
                                </Grid>
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="Tag" Value="False"/>
                                        <Condition Property="IsKeyboardFocusWithin" Value="False"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Visibility" TargetName="PassMessage" Value="Visible"/>
                                </MultiTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

<Grid>
    <PasswordBox x:Name="passwordBox" Style="{StaticResource PasswordStyle}" HorizontalAlignment="Left" Margin="217,256,0,0" VerticalAlignment="Top" Width="450"/>
</Grid>

在 xaml.cs 上

private void OnPasswordChanged(object sender, RoutedEventArgs e)
        {
            passwordBox = sender as PasswordBox;
            passwordBox.Tag = (!string.IsNullOrEmpty(passwordBox.Password)).ToString();
        }

希望这有帮助


-1
投票

你可以试试这个:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsFocused" Value="False"/>
        <Condition Property="Text" Value=""/>
    </MultiTrigger.Conditions>
    <Setter Property="Visibility" TargetName="WARKTEXT" Value="Visible"/>
</MultiTrigger>
<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsFocused" Value="False"/>
        <Condition Property="Text" Value="{x:Null}"/>
    </MultiTrigger.Conditions>
    <Setter Property="Visibility" TargetName="WARKTEXT" Value="Visible"/>
</MultiTrigger>

如果文本不为空或为空,则会显示提示,否则不显示。

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.