Why is my WPF PasswordBox style trigger not working?

Aks*_*ala 6 c# wpf templates triggers styles

So I have this PasswordBox in my app.

XAML

<PasswordBox Name="PB_PASSWORD" Padding="100,0,34,0" FontSize="20" Width="384" Height="34" PasswordChar="?" Password="" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Century Gothic" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" TabIndex="2" PasswordChanged="PB_PASSWORD_PasswordChanged" >
            <PasswordBox.Style>
                <Style BasedOn="{x:Null}" TargetType="{x:Type PasswordBox}">
                    <Setter Property="Background" Value="#FFCCCCCC" />
                    <Setter Property="Foreground" Value="#FFF22613" />
                    <Setter Property="BorderBrush" Value="#FFF22613" />
                    <Setter Property="BorderThickness" Value="0,2,0,2" />
                    <Setter Property="ClipToBounds" Value="true"/>
                    <Setter Property="OverridesDefaultStyle" Value="true"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="PasswordBox">
                                <Grid>
                                    <Border Background="{TemplateBinding Background}"
                                            BorderBrush="{TemplateBinding BorderBrush}"
                                            BorderThickness="{TemplateBinding BorderThickness}">
                                        <ScrollViewer x:Name="PART_ContentHost" Margin="0,-4,0,0" />
                                    </Border>
                                    <TextBlock Name="TB" Text="Password" HorizontalAlignment="Left" Margin="140,0,0,0" VerticalAlignment="Center" Foreground="#FF222222" Opacity="0.3"/>
                                </Grid>
                                <ControlTemplate.Triggers>

                                    <Trigger Property="IsFocused" Value="true">
                                        <Setter TargetName="TB" Property="Text" Value="Password:" />
                                        <Trigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.EnterActions>
                                        <Trigger.ExitActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.ExitActions>
                                    </Trigger>

                                    <Trigger Property="ClipToBounds" Value="false">
                                        <Setter TargetName="TB" Property="Text" Value="Password:" />
                                        <Trigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.EnterActions>
                                        <Trigger.ExitActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.ExitActions>
                                    </Trigger>

                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsFocused" Value="false" />
                                            <Condition Property="ClipToBounds" Value="true" />
                                        </MultiTrigger.Conditions>
                                        <Setter TargetName="TB" Property="Text" Value="Password" />
                                        <MultiTrigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <BackEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </MultiTrigger.EnterActions>
                                        <MultiTrigger.ExitActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">
                                                        <ThicknessAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </ThicknessAnimation.EasingFunction>
                                                    </ThicknessAnimation>
                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">
                                                        <DoubleAnimation.EasingFunction>
                                                            <SineEase EasingMode="EaseOut"/>
                                                        </DoubleAnimation.EasingFunction>
                                                    </DoubleAnimation>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </MultiTrigger.ExitActions>
                                    </MultiTrigger>

                                    <Trigger Property="IsEnabled" Value="false">
                                        <Setter TargetName="TB" Property="Text" Value="DISABLE"/>
                                        <Setter TargetName="TB" Property="Margin" Value="140,0,0,0"/>
                                        <Setter Property="Background" Value="#FFAAAAAA"/>
                                        <Setter Property="Foreground" Value="#FF777777"/>
                                        <Setter Property="BorderBrush" Value="#FF888888" />
                                        <Setter Property="BorderThickness" Value="0,3,0,3" />
                                    </Trigger>

                                    <Trigger Property="Tag" Value="ShowPW">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                    </Trigger>

                                    <Trigger Property="Tag" Value="HidePW">
                                        <Setter Property="Visibility" Value="Visible"/>
                                    </Trigger>

                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                    </Style.Triggers>
                </Style>
            </PasswordBox.Style>
        </PasswordBox>
Run Code Online (Sandbox Code Playgroud)

And I need to change its border color when the password entered is empty.

Following Code Changes BorderColor if PasswordBox's Password Value Changed.
Note: PasswordBox Disabling is Happening After PasswordBox.Password is Cleared. So this Shouldn't Matter [I Guess]. c#

    private void PB_PASSWORD_PasswordChanged(object sender, RoutedEventArgs e)
    {
        if (PB_PASSWORD.SecurePassword.Length == 0)
        {   //Password is Empty.
            PB_PASSWORD.ClipToBounds = true;
        }
        else
        {   //Password Not Empty
            PB_PASSWORD.ClipToBounds = false;
        }

        Int32 PWStrength = 0;
        if (PB_PASSWORD.SecurePassword.Length >= 5)
        {
            //A Function that Return int Value between 0-5 depending on how Strong is Password.
            PWStrength = GetPasswordStrength(Marshal.PtrToStringUni(Marshal.SecureStringToGlobalAllocUnicode(PB_PASSWORD.SecurePassword)));
        }
            //Corresponding Colors Are Set as per Returned Integer0=red, 1=Orange+Red, 2=Orange, 3=Yellow, 4=Light Green, 5=Green
        switch (PWStrength)
        {
            case 0:
                {
                    //Following 2 Lines Required to Unfreez Color From Control
                    PB_PASSWORD.Foreground = new SolidColorBrush(CustomColors.PasswordStrengthColors[PWStrength]);
                    PB_PASSWORD.BorderBrush = new SolidColorBrush(CustomColors.PasswordStrengthColors[PWStrength]);

                    ColorAnimation AnimateForegroundColor_0 = new ColorAnimation(CustomColors.PasswordStrengthColors[PWStrength], new Duration(TimeSpan.FromMilliseconds(200)));
                    PB_PASSWORD.Foreground.BeginAnimation(SolidColorBrush.ColorProperty, AnimateForegroundColor_0);
                    ColorAnimation AnimateBorderBrushColor_0 = new ColorAnimation(CustomColors.PasswordStrengthColors[PWStrength], new Duration(TimeSpan.FromMilliseconds(200)));
                    PB_PASSWORD.BorderBrush.BeginAnimation(SolidColorBrush.ColorProperty, AnimateBorderBrushColor_0);
                    break;
                }

            default:
                {
                    ColorAnimation AnimateForegroundColor = new ColorAnimation(CustomColors.PasswordStrengthColors[PWStrength], new Duration(TimeSpan.FromMilliseconds(200)));
                    PB_PASSWORD.Foreground.BeginAnimation(SolidColorBrush.ColorProperty, AnimateForegroundColor);
                    ColorAnimation AnimateBorderBrushColor = new ColorAnimation(CustomColors.PasswordStrengthColors[PWStrength], new Duration(TimeSpan.FromMilliseconds(200)));
                    PB_PASSWORD.BorderBrush.BeginAnimation(SolidColorBrush.ColorProperty, AnimateBorderBrushColor);
                    break;
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

The password value is not accessible, so I used the ClipToBounds Boolean value to set it, like this: C#

if (String.IsNullOrEmpty(PB_PASSWORD.Password))
{ PB_PASSWORD.ClipToBounds = true; }
else
{ PB_PASSWORD.ClipToBounds = false; }
Run Code Online (Sandbox Code Playgroud)

This is working fine when the app first starts.

The problem starts when I modify the enable/disable value from the code-behind, such as in the following:

C#

    private void Button_Click(object sender, RoutedEventArgs e)
    {

        if (PB_PASSWORD.IsEnabled)
        {
            PB_PASSWORD.ClipToBounds = true;
            PB_PASSWORD.Password = "";
            BTN_BROWSE.Focus();
            PB_PASSWORD.MoveFocus(new System.Windows.Input.TraversalRequest(System.Windows.Input.FocusNavigationDirection.Next));
            PB_PASSWORD.IsEnabled = false;
        }
        else
        {
            PB_PASSWORD.IsEnabled = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

It's supposed to look like this, after typing in the password and then disabling:

预期

But it looks like this:

实际

我需要在XAML代码中解决它.

Kam*_*cki 5

项目链接:此处- 必须下载!

\n\n

我决定为您提供一个完整的 MVVM 示例,以便您可以学习如何“以正确的方式”进行操作。

\n\n
\n

注意:我正在使用MVVM Light(因为它的 RelayCommand)。您可以通过 NuGet 安装它。它值得拥有,因为它为 MVVM 开发提供了许多有用的类。另一种替代方案是Prism。

\n
\n\n

1.什么是MVVM?

\n\n

MVVM(模型 - 视图 - ViewModel)是一种与 WPF 完美契合的编程模式。它的主要目的是从ViewModel中分离视图- 你所看到的(程序的逻辑)分离。

\n\n

它可能会导致需要更多的编码,但回报是巨大的 - 你会得到一个干净的、结构化的代码,它是模块化的并且非常容易测试(即单元测试)。

\n\n

1.1 - 模型

\n\n

模型基本上是程序的结构。它应该为您的类提供骨干,保存数据并在 ViewModel 中进一步使用。

\n\n

就这个项目而言 - 虽然没有模型 - 因为它不需要(随着您的应用程序的进展,它肯定会变得需要!)

\n\n

1.2 - 视图

\n\n

视图基本上就是您所看到的。最常见的是,它是一个窗口,它有显示的元素 - 但它不一定只是这样!UserControl 本身可以是一个 View,并且有自己的 ViewModel 绑定到它 - 与它所在的 Window 不同。

\n\n

1.3 视图模型

\n\n

ViewModel 基本上是程序的核心。它保存逻辑并具有视图可以绑定到其控件并在其控件中使用/显示的属性。\n将此视为brain您的应用程序。

\n\n

2. 代码

\n\n

看法:

\n\n
<Window x:Class="PasswordBoxMVVM.MainWindow"\n    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\n    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\n    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\n    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\n    xmlns:local="clr-namespace:PasswordBoxMVVM"\n    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"\n    xmlns:b="clr-namespace:System.Media;assembly=System"\n    mc:Ignorable="d"\n    Title="MainWindow" Height="350" Width="525">\n<Window.Resources>\n    <local:PasswordLengthToColorConverter x:Key="passwordLengthToColorConverter" />\n</Window.Resources>\n<Grid>\n    <StackPanel VerticalAlignment="Center">\n        <PasswordBox local:PasswordBoxMVVMAttachedProperties.EncryptedPassword="{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\n                     IsEnabled="{Binding Path=IsPasswordFieldDisabled, Mode=TwoWay ,UpdateSourceTrigger=PropertyChanged}"\n                     FontSize="20" Width="384" Height="34" PasswordChar="\xe2\x96\x88" HorizontalAlignment="Center" FontFamily="Century Gothic" \n                     HorizontalContentAlignment="Left" VerticalContentAlignment="Center" TabIndex="2" Foreground="Red"\n                     PasswordChanged="MyPasswordBox_PasswordChanged"\n                     IsEnabledChanged="PasswordBox_IsEnabledChanged">\n            <i:Interaction.Triggers>\n                <i:EventTrigger EventName="PasswordChanged">\n                    <i:InvokeCommandAction Command="{Binding Path=PasswordChangedCommand}" />\n                </i:EventTrigger>\n            </i:Interaction.Triggers>\n            <PasswordBox.Style>\n                <Style TargetType="{x:Type PasswordBox}">\n                    <Setter Property="Background" Value="#FFCCCCCC" />\n                    <Setter Property="BorderThickness" Value="0,2,0,2" />\n                    <Setter Property="BorderBrush" Value="Red" />\n                    <Setter Property="ClipToBounds" Value="true"/>\n                    <Setter Property="OverridesDefaultStyle" Value="true"/>\n                    <Setter Property="Template">\n                        <Setter.Value>\n                            <ControlTemplate TargetType="PasswordBox">\n                                <Grid>\n                                    <Border Background="{TemplateBinding Background}"\n                                            BorderThickness="{TemplateBinding BorderThickness}"\n                                            BorderBrush="{TemplateBinding Foreground}">\n                                        <ScrollViewer x:Name="PART_ContentHost" Margin="0,-4,0,0"/>\n                                    </Border>\n                                    <TextBlock Name="TB" Text="Password" HorizontalAlignment="Left" Margin="140,0,0,0" VerticalAlignment="Center"  Opacity="0.3" Foreground="Gray">\n                                    </TextBlock>\n                                </Grid>\n                                <ControlTemplate.Triggers>\n                                    <Trigger Property="IsFocused" Value="true">\n                                        <Setter TargetName="TB" Property="Text" Value="Password:" />\n                                        <Trigger.EnterActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </Trigger.EnterActions>\n                                        <Trigger.ExitActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </Trigger.ExitActions>\n                                    </Trigger>\n\n                                    <DataTrigger Binding="{Binding Path=IsPasswordFieldEmpty,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="false">\n                                        <Setter TargetName="TB" Property="Text" Value="Password:" />\n                                        <DataTrigger.EnterActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </DataTrigger.EnterActions>\n                                        <DataTrigger.ExitActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </DataTrigger.ExitActions>\n                                    </DataTrigger>\n\n                                    <MultiDataTrigger>\n                                        <MultiDataTrigger.Conditions>\n                                            <Condition Binding="{Binding Path=IsFocused, RelativeSource={RelativeSource Self}}" Value="false" />\n                                            <Condition Binding="{Binding Path=IsPasswordFieldEmpty, UpdateSourceTrigger=PropertyChanged}" Value="true" />\n                                        </MultiDataTrigger.Conditions>\n                                        <Setter TargetName="TB" Property="Text" Value="Password" />\n                                        <MultiDataTrigger.EnterActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="230,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="140,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="0.3" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <BackEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </MultiDataTrigger.EnterActions>\n                                        <MultiDataTrigger.ExitActions>\n                                            <BeginStoryboard>\n                                                <Storyboard>\n                                                    <ThicknessAnimation Storyboard.TargetProperty="Padding" To="100,0,34,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <ThicknessAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Margin" To="2,0,0,0" Duration="0:0:0.3">\n                                                        <ThicknessAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </ThicknessAnimation.EasingFunction>\n                                                    </ThicknessAnimation>\n                                                    <DoubleAnimation Storyboard.TargetName="TB" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.3">\n                                                        <DoubleAnimation.EasingFunction>\n                                                            <SineEase EasingMode="EaseOut"/>\n                                                        </DoubleAnimation.EasingFunction>\n                                                    </DoubleAnimation>\n                                                </Storyboard>\n                                            </BeginStoryboard>\n                                        </MultiDataTrigger.ExitActions>\n                                    </MultiDataTrigger>\n\n                                    <Trigger Property="IsEnabled" Value="false">\n                                        <Setter TargetName="TB" Property="Text" Value="DISABLE"/>\n                                        <Setter TargetName="TB" Property="Margin" Value="140,0,0,0"/>\n                                        <Setter Property="Background" Value="#FFAAAAAA"/>\n                                        <Setter Property="Foreground" Value="Gray"/>\n                                        <Setter Property="BorderBrush" Value="#FF888888" />\n                                        <Setter Property="BorderThickness" Value="0,3,0,3" />\n                                    </Trigger>\n                                    <Trigger Property="Tag" Value="ShowPW">\n                                        <Setter Property="Visibility" Value="Hidden"/>\n                                    </Trigger>\n                                    <Trigger Property="Tag" Value="HidePW">\n                                        <Setter Property="Visibility" Value="Visible"/>\n                                    </Trigger>\n                                </ControlTemplate.Triggers>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                    <Style.Triggers>\n                    </Style.Triggers>\n                </Style>\n            </PasswordBox.Style>\n            <PasswordBox.Triggers>\n                <EventTrigger RoutedEvent="PasswordBox.PasswordChanged">\n                    <BeginStoryboard>\n                        <Storyboard>\n                            <ColorAnimation Storyboard.TargetProperty="(PasswordBox.Foreground).(SolidColorBrush.Color)" \n