Add Url property to HyperLink; simplify converter link handling; add http/https scheme guard

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-24 15:58:26 +00:00
parent f6ded3fc8c
commit 3daf49cb52
2 changed files with 34 additions and 18 deletions

View File

@@ -1,7 +1,10 @@
using System.Windows.Input;
using System;
using System.Diagnostics;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using DiscordChatExporter.Gui.Utils.Extensions;
namespace DiscordChatExporter.Gui.Views.Controls;
@@ -16,6 +19,12 @@ public partial class HyperLink : UserControl
public static readonly StyledProperty<object?> CommandParameterProperty =
Button.CommandParameterProperty.AddOwner<HyperLink>();
// If Url is set and Command is not set, clicking will open this URL in the default browser.
public static readonly StyledProperty<string?> UrlProperty = AvaloniaProperty.Register<
HyperLink,
string?
>(nameof(Url));
public HyperLink() => InitializeComponent();
public string? Text
@@ -36,14 +45,26 @@ public partial class HyperLink : UserControl
set => SetValue(CommandParameterProperty, value);
}
public string? Url
{
get => GetValue(UrlProperty);
set => SetValue(UrlProperty, value);
}
private void TextBlock_OnPointerReleased(object? sender, PointerReleasedEventArgs args)
{
if (Command is null)
return;
if (!Command.CanExecute(CommandParameter))
return;
Command.Execute(CommandParameter);
if (Command is not null)
{
if (Command.CanExecute(CommandParameter))
Command.Execute(CommandParameter);
}
else if (
!string.IsNullOrWhiteSpace(Url)
&& Uri.TryCreate(Url, UriKind.Absolute, out var uri)
&& (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
)
{
Process.StartShellExecute(uri.AbsoluteUri);
}
}
}