mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
button builder
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
namespace Snap.Hutao.Control.Builder.ButtonBase;
|
||||
|
||||
internal sealed class ButtonBaseBuilder<TButton> : IButtonBaseBuilder<TButton>
|
||||
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase, new()
|
||||
{
|
||||
public TButton Button { get; } = new();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||
using Snap.Hutao.Core.Abstraction;
|
||||
using Snap.Hutao.Core.Abstraction.Extension;
|
||||
|
||||
namespace Snap.Hutao.Control.Builder.ButtonBase;
|
||||
|
||||
internal static class ButtonBaseBuilderExtension
|
||||
{
|
||||
public static TBuilder SetContent<TBuilder, TButton>(this TBuilder builder, object? content)
|
||||
where TBuilder : IButtonBaseBuilder<TButton>
|
||||
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
|
||||
{
|
||||
builder.Configure(builder => builder.Button.Content = content);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static TBuilder SetCommand<TBuilder, TButton>(this TBuilder builder, ICommand command)
|
||||
where TBuilder : IButtonBaseBuilder<TButton>
|
||||
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
|
||||
{
|
||||
builder.Configure(builder => builder.Button.Command = command);
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) DGP Studio. All rights reserved.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Snap.Hutao.Core.Abstraction;
|
||||
|
||||
namespace Snap.Hutao.Control.Builder.ButtonBase;
|
||||
|
||||
internal interface IButtonBaseBuilder<TButton> : IBuilder
|
||||
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
|
||||
{
|
||||
TButton Button { get; }
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||
using Microsoft.UI.Xaml.Media.Animation;
|
||||
using Snap.Hutao.Core.Abstraction;
|
||||
using Snap.Hutao.Core.Abstraction.Extension;
|
||||
@@ -20,5 +21,7 @@ internal sealed class InfoBarOptions
|
||||
|
||||
public object? Content { get; set; }
|
||||
|
||||
public ButtonBase? ActionButton { get; set; }
|
||||
|
||||
public int MilliSecondsDelay { get; set; }
|
||||
}
|
||||
@@ -2,39 +2,55 @@
|
||||
// Licensed under the MIT license.
|
||||
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||
using Snap.Hutao.Control.Builder.ButtonBase;
|
||||
using Snap.Hutao.Core.Abstraction.Extension;
|
||||
|
||||
namespace Snap.Hutao.Service.Notification;
|
||||
|
||||
internal static class InfoBarOptionsBuilderExtension
|
||||
{
|
||||
public static IInfoBarOptionsBuilder SetSeverity(this IInfoBarOptionsBuilder builder, InfoBarSeverity severity)
|
||||
public static TBuilder SetSeverity<TBuilder>(this TBuilder builder, InfoBarSeverity severity)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
{
|
||||
builder.Configure(builder => builder.Options.Severity = severity);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static IInfoBarOptionsBuilder SetTitle(this IInfoBarOptionsBuilder builder, string? title)
|
||||
public static TBuilder SetTitle<TBuilder>(this TBuilder builder, string? title)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
{
|
||||
builder.Configure(builder => builder.Options.Title = title);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static IInfoBarOptionsBuilder SetMessage(this IInfoBarOptionsBuilder builder, string? message)
|
||||
public static IInfoBarOptionsBuilder SetMessage<TBuilder>(this TBuilder builder, string? message)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
{
|
||||
builder.Configure(builder => builder.Options.Message = message);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static IInfoBarOptionsBuilder SetContent(this IInfoBarOptionsBuilder builder, object? content)
|
||||
public static IInfoBarOptionsBuilder SetContent<TBuilder>(this TBuilder builder, object? content)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
{
|
||||
builder.Configure(builder => builder.Options.Content = content);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static IInfoBarOptionsBuilder SetDelay(this IInfoBarOptionsBuilder builder, int milliSeconds)
|
||||
public static IInfoBarOptionsBuilder SetActionButton<TBuilder, TButton>(this TBuilder builder, Action<ButtonBaseBuilder<TButton>> configureButton)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
where TButton : ButtonBase, new()
|
||||
{
|
||||
ButtonBaseBuilder<TButton> buttonBaseBuilder = new ButtonBaseBuilder<TButton>().Configure(configureButton);
|
||||
builder.Configure(builder => builder.Options.ActionButton = buttonBaseBuilder.Button);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static IInfoBarOptionsBuilder SetDelay<TBuilder>(this TBuilder builder, int milliSeconds)
|
||||
where TBuilder : IInfoBarOptionsBuilder
|
||||
{
|
||||
builder.Configure(builder => builder.Options.MilliSecondsDelay = milliSeconds);
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ internal sealed class InfoBarService : IInfoBarService
|
||||
Message = builder.Options.Message,
|
||||
Content = builder.Options.Content,
|
||||
IsOpen = true,
|
||||
ActionButton = builder.Options.ActionButton,
|
||||
Transitions = [new AddDeleteThemeTransition()],
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user