Стиль WPF Passwordbox
В настоящее время я пытаюсь сделать следующее: Если пароль не введен, то должен быть показан текст "пароль".
Но в моем шаблоне пароль не отображается, и если я использую декоратор или scrollviewer, я не могу изменить цвет текста.Есть ли у вас какие-либо идеи для достижения этой цели?
Вот мой код стиля:
<Style TargetType="{x:Type PasswordBox}" x:Key="Password">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="PasswordBox">
<Grid>
<PasswordBox Background="{StaticResource BrushDark}" Foreground="{StaticResource BrushTextNormal}" BorderBrush="{StaticResource BrushBorderInput}" BorderThickness="1"/>
<TextBlock HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="Password"
Margin="5,0,5,0"
Foreground="#ff808080"
IsHitTestVisible="False"
x:Name="UserMessage"
Visibility="Hidden"/>
<!--<ScrollViewer Foreground="{StaticResource BrushTextNormal}" Background="{StaticResource BrushTextNormal}" x:Name="PART_ContentHost"/>-->
<!--<Decorator TextBlock.Foreground="White" x:Name="PART_ContentHost"/>-->
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Tag" Value=""/>
<Condition Property="IsKeyboardFocusWithin" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="UserMessage" Value="Visible"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
1 ответ:
Если вы создаете пользовательский
ControlTemplate
дляPasswordBox
илиTextBox
, вам нужно поместитьScrollViewer
именованныйx:Name="PART_ContentHost
вместо внутреннегоPasswordBox
From PasswordBox Syles and Templates
PART_ContentHost-визуальный элемент, который может содержать элемент FrameworkElement. В этом элементе отображается текст поля PasswordBox.
И измениться
Foreground
как другойSetter
в васStyle
. Кроме того, как побочный узел, я бы сделал то же самое сBackground
и использовалTemplateBinding
в вашемControlTemplate
. Это даст больше гибкость и позволяет изменятьBackground
и / илиForeground
вручную без измененияControlTemplate
<Style TargetType="{x:Type PasswordBox}" x:Key="Password"> <Setter Property="Foreground" Value="{StaticResource BrushTextNormal}" /> <Setter Property="Background" Value="{StaticResource BrushDark}"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type PasswordBox}"> <Grid Background="{TemplateBinding Background}"> <ScrollViewer x:Name="PART_ContentHost" .../> <TextBlock .../> </Grid> <ControlTemplate.Triggers> <!-- removed --> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>