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