您可以尝试处理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();
}
希望这有帮助
你可以试试这个:
<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>
如果文本不为空或为空,则会显示提示,否则不显示。
希望对您有帮助。