WPF文本框使用密码字符?

时间:2015-11-18 11:05:52

标签: c# wpf xaml textbox passwordbox

我有一个文本框,我也想用作密码框?是否有可能做到这一点?我添加了PasswordChar =' *'但这没有什么区别?这是我的代码。

public class AnimatedTextBox2 : TextBox
{
    public static readonly DependencyProperty LabelProperty =
        DependencyProperty.Register("Label", typeof(string), typeof(AnimatedTextBox2),
            new FrameworkPropertyMetadata(null));

    public static readonly DependencyProperty HintProperty =
        DependencyProperty.Register("Hint", typeof(string), typeof(AnimatedTextBox2),
            new FrameworkPropertyMetadata(null));

    static AnimatedTextBox2()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(AnimatedTextBox2),
            new FrameworkPropertyMetadata(typeof(AnimatedTextBox2)));
        AnimatedTextBox2.PasswordChar = '*';
    }

    public string Label
    {
        get { return (string)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    public string Hint
    {
        get { return (string)GetValue(HintProperty); }
        set { SetValue(HintProperty, value); }
    }

    public static char PasswordChar { get; set; }
}

    <StackPanel Margin="0,0,-60,194.833" Height="62.731" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="458.167">
        <local:AnimatedTextBox2
                           Margin="139.5,0,151.5,15"
                           VerticalAlignment="Center"
                           Hint="Enter Password"
                           Label="Floating Label Text" Height="37.921" />

    </StackPanel>

下面添加了UPDATE控制模板。

 <Style TargetType="{x:Type local:AnimatedTextBox2}">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />
    <Setter Property="BorderBrush" Value="{StaticResource SolidColorBrush.Control.Border}" />
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None" />
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="AllowDrop" Value="true" />
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:AnimatedTextBox2}">
                <ControlTemplate.Resources />
                <Border x:Name="Border"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="0,0,0,2"
                        SnapsToDevicePixels="True">
                    <StackPanel>
                        <TextBlock x:Name="LabelTextBlock"
                            Focusable="False"
                            Foreground="{TemplateBinding BorderBrush}"
                            RenderTransformOrigin="0.5,0.5"
                            Text="{TemplateBinding Label}" HorizontalAlignment="Stretch">
                            <TextBlock.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform ScaleX="1" ScaleY="1" />
                                    <TranslateTransform X="0" Y="0" />
                                </TransformGroup>
                            </TextBlock.RenderTransform>
                        </TextBlock>
                        <Grid>
                            <ScrollViewer x:Name="PART_ContentHost"
                                Focusable="false"
                                HorizontalScrollBarVisibility="Hidden"
                                VerticalScrollBarVisibility="Hidden" Margin="-2,0,1,0" />
                            <TextBlock x:Name="HintTextBlock"
                                Margin="-1,0,6,0"
                                Focusable="False"
                                Foreground="{StaticResource SolidColorBrush.Hint}"
                                IsHitTestVisible="False"
                                Opacity="0"
                                Text="{TemplateBinding Hint}" />
                        </Grid>
                    </StackPanel>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Duration="0:0:0.6"
                                                    Storyboard.TargetProperty="BorderBrush.Color"
                                                    To="{StaticResource Color.Control.Border.Focus}" />
                                    <ColorAnimation Duration="0:0:0.6"
                                                    Storyboard.TargetName="LabelTextBlock"
                                                    Storyboard.TargetProperty="Foreground.Color"
                                                    To="{StaticResource Color.Control.Border.Focus}" />

                                    <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="LabelTextBlock" From="14" To="10" Storyboard.TargetProperty="FontSize"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Duration="0:0:0.6" Storyboard.TargetProperty="BorderBrush.Color" />
                                    <ColorAnimation Duration="0:0:0.6"
                                                    Storyboard.TargetName="LabelTextBlock"
                                                    Storyboard.TargetProperty="Foreground.Color" />
                                    <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="LabelTextBlock" From="10" To="14" Storyboard.TargetProperty="FontSize"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=Text.Length, RelativeSource={RelativeSource Self}}" Value="0" />
                            <Condition Binding="{Binding Path=IsFocused, RelativeSource={RelativeSource Self}}" Value="false" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                                     To="1" />
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                                     To="1" />
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"
                                                     To="15" />
                                    <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="LabelTextBlock" From="10" To="14" Storyboard.TargetProperty="FontSize"/>

                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                        <MultiDataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" />
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" />
                                    <DoubleAnimation Duration="0:0:0.2"
                                                     Storyboard.TargetName="LabelTextBlock"
                                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)" />
                                    <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="LabelTextBlock" From="14" To="10" Storyboard.TargetProperty="FontSize"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.ExitActions>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=Text.Length, RelativeSource={RelativeSource Self}}" Value="0" />
                            <Condition Binding="{Binding Path=IsFocused, RelativeSource={RelativeSource Self}}" Value="true" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Duration="0:0:0.1"
                                                     Storyboard.TargetName="HintTextBlock"
                                                     Storyboard.TargetProperty="Opacity"
                                                     To="1" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                        <MultiDataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Duration="0:0:0.1"
                                                     Storyboard.TargetName="HintTextBlock"
                                                     Storyboard.TargetProperty="Opacity" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.ExitActions>
                    </MultiDataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:0)

您必须使用PasswordBox而不是TextBox:

public class AnimatedTextBox2 : PasswordBox
{
   // logic
}