Skip to content

Commit 20ed84f

Browse files
authored
Merge branch 'main' into marquee
2 parents 5539a1e + 6b70af1 commit 20ed84f

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

components/MarkdownTextBlock/src/HtmlWriter.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ public static void WriteHtml(WinUIRenderer renderer, HtmlNodeCollection nodes)
3636
var myHyperlinkButton = new MyHyperlinkButton(node, renderer.Config.BaseUrl);
3737
myHyperlinkButton.ClickEvent += (sender, e) =>
3838
{
39-
renderer.MarkdownTextBlock.RaiseLinkClickedEvent(((HyperlinkButton)sender).NavigateUri);
39+
var button = (HyperlinkButton)sender;
40+
var uri = button.NavigateUri;
41+
var handled = renderer.MarkdownTextBlock.RaiseLinkClickedEvent(uri);
42+
if (handled)
43+
{
44+
button.NavigateUri = null;
45+
}
4046
};
4147
hyperLink = myHyperlinkButton;
4248
}
@@ -45,7 +51,12 @@ public static void WriteHtml(WinUIRenderer renderer, HtmlNodeCollection nodes)
4551
var myHyperlink = new MyHyperlink(node, renderer.Config.BaseUrl);
4652
myHyperlink.ClickEvent += (sender, e) =>
4753
{
48-
renderer.MarkdownTextBlock.RaiseLinkClickedEvent(sender.NavigateUri);
54+
var uri = sender.NavigateUri;
55+
var handled = renderer.MarkdownTextBlock.RaiseLinkClickedEvent(uri);
56+
if (handled)
57+
{
58+
sender.NavigateUri = null;
59+
}
4960
};
5061
hyperLink = myHyperlink;
5162
}

components/MarkdownTextBlock/src/LinkClickedEventArgs.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ namespace CommunityToolkit.WinUI.Controls;
77
public class LinkClickedEventArgs : EventArgs
88
{
99
public Uri Uri { get; }
10+
/// <summary>
11+
/// Set to true in your handler to indicate the link click was handled and default navigation should be suppressed.
12+
/// </summary>
13+
public bool Handled { get; set; }
1014

1115
public LinkClickedEventArgs(Uri uri)
1216
{

components/MarkdownTextBlock/src/MarkdownTextBlock.xaml.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,16 @@ public partial class MarkdownTextBlock : Control
2323

2424
public event EventHandler<LinkClickedEventArgs>? OnLinkClicked;
2525

26-
internal void RaiseLinkClickedEvent(Uri uri) => OnLinkClicked?.Invoke(this, new LinkClickedEventArgs(uri));
26+
internal bool RaiseLinkClickedEvent(Uri uri)
27+
{
28+
if (OnLinkClicked == null)
29+
{
30+
return false;
31+
}
32+
var args = new LinkClickedEventArgs(uri);
33+
OnLinkClicked?.Invoke(this, args);
34+
return args.Handled;
35+
}
2736

2837
private static void OnConfigChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
2938
{

components/MarkdownTextBlock/src/Renderers/ObjectRenderers/Inlines/LinkInlineRenderer.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,15 @@ protected override void Write(WinUIRenderer renderer, LinkInline link)
3333
var myHyperlinkButton = new MyHyperlinkButton(link, renderer.Config.BaseUrl);
3434
myHyperlinkButton.ClickEvent += (sender, e) =>
3535
{
36-
renderer.MarkdownTextBlock.RaiseLinkClickedEvent(((HyperlinkButton)sender).NavigateUri);
36+
var button = (HyperlinkButton)sender;
37+
var uri = button.NavigateUri;
38+
var handled = renderer.MarkdownTextBlock.RaiseLinkClickedEvent(uri);
39+
if (handled)
40+
{
41+
// Suppress default navigation by clearing NavigateUri just for this invocation
42+
button.NavigateUri = null;
43+
// Optionally restore later; not needed unless reused.
44+
}
3745
};
3846
renderer.Push(myHyperlinkButton);
3947
}
@@ -42,7 +50,13 @@ protected override void Write(WinUIRenderer renderer, LinkInline link)
4250
var hyperlink = new MyHyperlink(link, renderer.Config.BaseUrl);
4351
hyperlink.ClickEvent += (sender, e) =>
4452
{
45-
renderer.MarkdownTextBlock.RaiseLinkClickedEvent(sender.NavigateUri);
53+
var uri = sender.NavigateUri;
54+
var handled = renderer.MarkdownTextBlock.RaiseLinkClickedEvent(uri);
55+
if (handled)
56+
{
57+
// Suppress navigation by clearing NavigateUri
58+
sender.NavigateUri = null;
59+
}
4660
};
4761

4862
renderer.Push(hyperlink);

0 commit comments

Comments
 (0)