2017-04-14 133 views
0

我想要的风格PasswordBoxWPF,以便它可以显示提示。 我通过使用ResourceDictionary中下面的代码这样做:WPF PasswordBox一丝不工作

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:BudgetBuddy.Styles"> 

    <Style x:Key="PBHintStyle" TargetType="{x:Type PasswordBox}"> 
     <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
     <Setter Property="BorderBrush" Value="#FFABADB3"/> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <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 PasswordBox}"> 
        <Border 
          x:Name="border" 
          BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" 
          SnapsToDevicePixels="True" 
          CornerRadius="4" 
          Padding="5 2 0 0"> 
         <Grid> 
          <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> 
          <TextBlock x:Name="WARKTEXT" Text="{TemplateBinding Tag}" Foreground="DimGray" Visibility="Collapsed" /> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="Opacity" TargetName="border" Value="0.56"/> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/> 
         </Trigger> 
         <Trigger Property="IsKeyboardFocused" Value="True"> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsFocused" Value="False"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Visibility" TargetName="WARKTEXT" Value="Visible"/> 
         </MultiTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsInactiveSelectionHighlightEnabled" Value="True"/> 
        <Condition Property="IsSelectionActive" Value="False"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
      </MultiTrigger> 
     </Style.Triggers> 
    </Style> 

</ResourceDictionary> 

此代码的工作,但有一个问题。它显示提示,将字符显示为密码字符,但问题是在字段中输入密码后显示密码字符的提示。

下面是一些截图:

enter image description here

现在的问题是:

enter image description here

我该如何解决这个问题?提前致谢。 :)

+0

为什么Visual Studio标记? – EJoshuaS

回答

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

如果文本不为空或为空,则提示将显示,否则没有。

希望能帮助你。

+0

Property =“文本”在PasswordBox中无法识别。 –

+0

的确,我的错误,你可以尝试这个解决方案来创建多触发器: [link](https://social.msdn.microsoft.com/Forums/vstudio/en-US/9010a8b9-eab3-4d49-a6ff-fbc9129c7946/WPF的passwordbox输入条件触发器?论坛= WPF) – Tarboeuf