Я создал пользовательский элемент управления паролем для экрана входа в систему. Я пытался использовать подход с водяными знаками, но большинство примеров, которые я видел, потерпели неудачу, когда я пытался их использовать. Я переключился на возможность манипулировать видимостью метки с помощью кода C #.
<Style x:Key="{x:Type PasswordBox}"
x:Name="Style1"
BasedOn="{StaticResource {x:Type PasswordBox}}"
TargetType="{x:Type PasswordBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type PasswordBox}">
<Border x:Name="TextBoxBorder"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="7">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="2,1">
<GradientStop Color="{Binding Path=GradientColorStart}"
Offset="0"/>
<GradientStop Color="{Binding Path=GradientColorEnd}"
Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Grid>
<Label x:Name="TextPrompt"
Content="Password"
Focusable="False"
FontSize="15"
Foreground="Green"
Visibility="Visible" />
<ScrollViewer x:Name="PART_ContentHost" Margin="0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Foreground"
Value="{Binding Path=OnFocusTextColor}" />
<Setter Property="FontWeight"
Value="{Binding Path=OnFocusFontWeight}" />
<Setter Property="FontStyle"
Value="{Binding Path=OnFocusFontStyle}" />
</Trigger>
</ControlTemplate.Triggers>
<!--
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="False"/>
<Condition Property="Password" Value=""/>
</MultiTrigger.Conditions>
<Setter Property="Visibility"
TargetName="TextPrompt
Value="Visible"/>
</MultiTrigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Foreground" Value="{Binding Path=OnFocusTextColor}" />
<Setter Property="FontWeight" Value="{Binding Path=OnFocusFontWeight}" />
<Setter Property="FontStyle" Value="{Binding Path=OnFocusFontStyle}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="DimGray" />
</Trigger>
</ControlTemplate.Triggers>
-->
</ControlTemplate>
</Setter.Value>
</Setter>
Код для контроля
<PasswordBox x:Name="PasswordTest"
FontSize="15"
Padding="{Binding Path=TextPadding}"
Tag="{Binding Path=TextValue}"
PasswordChanged="PasswordTest_PasswordChanged">
</PasswordBox>
C # для PasswordTest_PasswordChanged
private void PasswordTest_PasswordChanged(object sender, RoutedEventArgs e)
{
}
Я пытался получить доступ к метке, но не уверен, как именно. Я попытался проанализировать отправителя как поле пароля, как другие примеры использования водяных знаков, но я не могу получить доступ к атрибуту пароля.