feat: Source & HoverMask.
This commit is contained in:
@@ -12,13 +12,24 @@
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate TargetType="{x:Type u:Avatar}">
|
||||
<Panel>
|
||||
<Ellipse Fill="{TemplateBinding Background}" />
|
||||
<Ellipse
|
||||
Fill="{TemplateBinding Background}"
|
||||
IsVisible="{TemplateBinding Source,Converter={x:Static ObjectConverters.IsNull}}" />
|
||||
<ContentPresenter
|
||||
Name="PART_ContentPresenter"
|
||||
IsVisible="{TemplateBinding Source,Converter={x:Static ObjectConverters.IsNull}}"
|
||||
CornerRadius="{TemplateBinding CornerRadius}"
|
||||
Content="{TemplateBinding Content}"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center" />
|
||||
<ContentPresenter
|
||||
Name="{x:Static u:Avatar.PART_HoverMask}"
|
||||
IsVisible="False"
|
||||
Content="{TemplateBinding HoverMask}"
|
||||
CornerRadius="{TemplateBinding CornerRadius}"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center" />
|
||||
<Image Source="{TemplateBinding Source}" />
|
||||
<DockPanel>
|
||||
<ContentPresenter DockPanel.Dock="Top" />
|
||||
<ContentPresenter DockPanel.Dock="Bottom" />
|
||||
@@ -26,6 +37,9 @@
|
||||
</Panel>
|
||||
</ControlTemplate>
|
||||
</Setter>
|
||||
<Style Selector="^:pointerover /template/ ContentPresenter#PART_HoverMask">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</Style>
|
||||
</ControlTheme>
|
||||
<ControlTheme x:Key="{x:Type u:AvatarGroup}" TargetType="{x:Type u:AvatarGroup}" />
|
||||
</ResourceDictionary>
|
||||
@@ -1,8 +1,12 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Metadata;
|
||||
using Avalonia.Controls.Presenters;
|
||||
using Avalonia.Media;
|
||||
|
||||
namespace Ursa.Controls;
|
||||
|
||||
[TemplatePart(PART_HoverMask, typeof(ContentPresenter))]
|
||||
public class Avatar : Button
|
||||
{
|
||||
public const string PART_TopPresenter = "PART_TopPresenter";
|
||||
@@ -15,9 +19,12 @@ public class Avatar : Button
|
||||
public static readonly StyledProperty<double> GapProperty = AvaloniaProperty.Register<Avatar, double>(
|
||||
nameof(Gap));
|
||||
|
||||
public static readonly StyledProperty<string> SourceProperty = AvaloniaProperty.Register<Avatar, string>(
|
||||
public static readonly StyledProperty<IImage?> SourceProperty = AvaloniaProperty.Register<Avatar, IImage?>(
|
||||
nameof(Source));
|
||||
|
||||
public static readonly StyledProperty<object?> HoverMaskProperty = AvaloniaProperty.Register<Avatar, object?>(
|
||||
nameof(HoverMask));
|
||||
|
||||
public bool ContentMotion
|
||||
{
|
||||
get => GetValue(ContentMotionProperty);
|
||||
@@ -30,9 +37,15 @@ public class Avatar : Button
|
||||
set => SetValue(GapProperty, value);
|
||||
}
|
||||
|
||||
public string Source
|
||||
public IImage? Source
|
||||
{
|
||||
get => GetValue(SourceProperty);
|
||||
set => SetValue(SourceProperty, value);
|
||||
}
|
||||
|
||||
public object? HoverMask
|
||||
{
|
||||
get => GetValue(HoverMaskProperty);
|
||||
set => SetValue(HoverMaskProperty, value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user