2015-11-18 4 views
0

У меня есть текстовое поле, которое я бы хотел использовать в качестве пароля? Можно ли сделать это? Я добавил PasswordChar = '*', но это не имеет никакого значения? Вот мой код.WPF Текстовое поле для использования символов паролей?

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 control template добавлен ниже.

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

Можете ли вы предоставить 'ControlTemplate' для этого' TextBox'? –

+0

Я не понимаю, почему это сработает ... все, что вы делаете, это настройка свойства, которое вы создали в своем пользовательском TextBox, который на самом деле ничего не делает. Какую логику вы указали для отображения звездочки? Возможно, вы захотите зарегистрироваться в [PasswordBox] (https://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox (v = vs.110) .aspx). –

+0

Шаблон управления, добавленный –

ответ

0

Вы должны использовать PasswordBox вместо TextBox:

public class AnimatedTextBox2 : PasswordBox 
{ 
    // logic 
} 
+0

Я пробовал это, но он не работает. –

+0

Почему это не работает? – Mariusz

+0

, потому что AnimatedTextbox2 не имеет пароля, у него есть текстовое поле, я угадываю его что-то, что мне нужно изменить в моем шаблоне управления, но я не уверен, что. –

Смежные вопросы