feat: simple avatar group.

This commit is contained in:
Zhang Dian
2024-06-20 16:14:05 +08:00
parent 83c4e07579
commit 5fc2c33fed
3 changed files with 31 additions and 6 deletions

View File

@@ -64,5 +64,14 @@
<u:Avatar Classes="Large" />
<u:Avatar Classes="ExtraLarge" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<u:AvatarGroup>
<u:Avatar Classes="Red" Content="LL" />
<u:Avatar Classes="" Content="CX" />
<u:Avatar Classes="Amber" Content="RM" />
<u:Avatar Background="#FDE3CF" Foreground="#F56A00" Content="ZL" />
<u:Avatar Background="#87D068" Classes="" Content="YZ" />
</u:AvatarGroup>
</StackPanel>
</StackPanel>
</UserControl>

View File

@@ -21,9 +21,7 @@
RadiusX="{Binding #PART_Ellipse.Bounds.Width, Converter={StaticResource DivideByTwoConverter}}"
RadiusY="{Binding #PART_Ellipse.Bounds.Height, Converter={StaticResource DivideByTwoConverter}}" />
</Panel.Clip>
<Ellipse
Name="PART_Ellipse"
Fill="Transparent"/>
<Ellipse Name="PART_Ellipse" />
<Ellipse
Fill="{TemplateBinding Background}"
IsVisible="{TemplateBinding Source, Converter={x:Static ObjectConverters.IsNull}}" />
@@ -131,5 +129,12 @@
<Setter Property="FontSize" Value="64" />
</Style>
</ControlTheme>
<ControlTheme x:Key="{x:Type u:AvatarGroup}" TargetType="{x:Type u:AvatarGroup}" />
<ControlTheme x:Key="{x:Type u:AvatarGroup}" TargetType="{x:Type u:AvatarGroup}">
<Setter Property="Template">
<ControlTemplate TargetType="u:AvatarGroup">
<ItemsPresenter ItemsPanel="{TemplateBinding ItemsPanel}" />
</ControlTemplate>
</Setter>
</ControlTheme>
</ResourceDictionary>

View File

@@ -1,5 +1,7 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Layout;
namespace Ursa.Controls;
@@ -7,11 +9,15 @@ public class AvatarGroup : ItemsControl
{
public const string PART_RenderMore = "PART_RenderMore";
private static readonly FuncTemplate<Panel?> DefaultPanel =
new(() => new StackPanel { Orientation = Orientation.Horizontal });
public static readonly StyledProperty<int> MaxCountProperty = AvaloniaProperty.Register<AvatarGroup, int>(
nameof(MaxCount));
public static readonly StyledProperty<OverlapFromType> OverlapFromProperty = AvaloniaProperty.Register<AvatarGroup, OverlapFromType>(
nameof(OverlapFrom));
public static readonly StyledProperty<OverlapFromType> OverlapFromProperty =
AvaloniaProperty.Register<AvatarGroup, OverlapFromType>(
nameof(OverlapFrom));
public int MaxCount
{
@@ -24,6 +30,11 @@ public class AvatarGroup : ItemsControl
get => GetValue(OverlapFromProperty);
set => SetValue(OverlapFromProperty, value);
}
static AvatarGroup()
{
ItemsPanelProperty.OverrideDefaultValue<AvatarGroup>(DefaultPanel);
}
}
public enum OverlapFromType