5 changed files with 39 additions and 119 deletions
@ -1,47 +0,0 @@ |
|||
using Avalonia.Controls.Primitives; |
|||
using Avalonia.Styling; |
|||
using System; |
|||
|
|||
namespace Avalonia.Controls |
|||
{ |
|||
public class PasswordBox : TextBox, IStyleable |
|||
{ |
|||
Type IStyleable.StyleKey => typeof(PasswordBox); |
|||
|
|||
public PasswordBox() |
|||
{ |
|||
this.GetObservable(TextProperty).Subscribe(text => |
|||
{ |
|||
if (text != null) |
|||
{ |
|||
DisplayText = new string(PasswordChar, text.Length); |
|||
} |
|||
else |
|||
{ |
|||
DisplayText = null; |
|||
} |
|||
}); |
|||
} |
|||
|
|||
public static readonly StyledProperty<char> PasswordCharProperty = AvaloniaProperty.Register<PasswordBox, char>(nameof(PasswordChar), '*'); |
|||
|
|||
public char PasswordChar |
|||
{ |
|||
get => GetValue(PasswordCharProperty); |
|||
set => SetValue(PasswordCharProperty, value); |
|||
} |
|||
|
|||
public static readonly StyledProperty<string> DisplayTextProperty = AvaloniaProperty.Register<PasswordBox, string>(nameof(DisplayText)); |
|||
|
|||
public string DisplayText |
|||
{ |
|||
get => GetValue(DisplayTextProperty); |
|||
set => SetValue(DisplayTextProperty, value); |
|||
} |
|||
|
|||
protected override void OnTemplateApplied(TemplateAppliedEventArgs e) |
|||
{ |
|||
base.OnTemplateApplied(e); |
|||
} |
|||
} |
|||
} |
|||
@ -1,64 +0,0 @@ |
|||
<Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<Style Selector="PasswordBox"> |
|||
<Setter Property="Background" Value="{DynamicResource ThemeBackgroundBrush}"/> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderMidBrush}"/> |
|||
<Setter Property="BorderThickness" Value="{DynamicResource ThemeBorderThickness}"/> |
|||
<Setter Property="Padding" Value="4"/> |
|||
<Setter Property="Template"> |
|||
<ControlTemplate> |
|||
<Border Name="border" |
|||
Background="{TemplateBinding Background}" |
|||
BorderBrush="{TemplateBinding BorderBrush}" |
|||
BorderThickness="{TemplateBinding BorderThickness}"> |
|||
<DockPanel Margin="{TemplateBinding Padding}"> |
|||
|
|||
<TextBlock Name="floatingWatermark" |
|||
Foreground="{DynamicResource ThemeAccentBrush}" |
|||
FontSize="{DynamicResource FontSizeSmall}" |
|||
Text="{TemplateBinding Watermark}" |
|||
DockPanel.Dock="Top"> |
|||
<TextBlock.IsVisible> |
|||
<MultiBinding Converter="{x:Static BoolConverters.And}"> |
|||
<Binding RelativeSource="{RelativeSource TemplatedParent}" |
|||
Path="UseFloatingWatermark"/> |
|||
<Binding RelativeSource="{RelativeSource TemplatedParent}" |
|||
Path="DisplayText" |
|||
Converter="{x:Static StringConverters.NotNullOrEmpty}"/> |
|||
</MultiBinding> |
|||
</TextBlock.IsVisible> |
|||
</TextBlock> |
|||
|
|||
<DataValidationErrors> |
|||
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding (ScrollViewer.HorizontalScrollBarVisibility)}" |
|||
VerticalScrollBarVisibility="{TemplateBinding (ScrollViewer.VerticalScrollBarVisibility)}"> |
|||
|
|||
<Panel> |
|||
<TextBlock Name="watermark" |
|||
Opacity="0.5" |
|||
Text="{TemplateBinding Watermark}" |
|||
IsVisible="{TemplateBinding Path=Text, Converter={x:Static StringConverters.NullOrEmpty}}"/> |
|||
<TextPresenter Name="PART_TextPresenter" |
|||
Text="{TemplateBinding Text, Mode=TwoWay}" |
|||
CaretIndex="{TemplateBinding CaretIndex}" |
|||
SelectionStart="{TemplateBinding SelectionStart}" |
|||
SelectionEnd="{TemplateBinding SelectionEnd}" |
|||
TextAlignment="{TemplateBinding TextAlignment}" |
|||
TextWrapping="{TemplateBinding TextWrapping}"/> |
|||
</Panel> |
|||
</ScrollViewer> |
|||
</DataValidationErrors> |
|||
</DockPanel> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter> |
|||
</Style> |
|||
<Style Selector="TextBox:pointerover /template/ Border#border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderDarkBrush}"/> |
|||
</Style> |
|||
<Style Selector="TextBox:focus /template/ Border#border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderDarkBrush}"/> |
|||
</Style> |
|||
<Style Selector="TextBox:error /template/ Border#border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource ErrorBrush}"/> |
|||
</Style> |
|||
</Styles> |
|||
Loading…
Reference in new issue