我正在构建一个聊天应用程序,我正在解析链接并将它们添加到带有超链接的聊天室视图中。这些超链接具有以下事件处理程序:
void urlLink_Click(object sender, RoutedEventArgs e)
{
try
{
Hyperlink link = sender as Hyperlink;
this.chatUI.DisplayWebBrowser(link.NavigateUri);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
事件是否被触发似乎是随机的。单击时某些链接将按预期工作,而某些链接将不起作用。有些链接可以开始使用,但收到更多消息后,它们就会停止工作。任何人都知道原因是什么以及如何解决这个问题?这就是创建超链接控件的方法:
newSpan = new Span();
Run urlRun = new Run();
urlRun.Text = urlMatches[i].Value;
Hyperlink urlLink = new Hyperlink();
urlLink.NavigateUri = new Uri(urlMatches[i].Value, UriKind.Absolute); // Add URI to the Hyperlink control
urlLink.Click += urlLink_Click; // Add event handler to control
urlLink.Inlines.Add(urlRun); // Add text to Hyperlink
答案 0 :(得分:1)
我有同样的问题。通过一些试验和错误,我修复了它...通过为超链接分配一个虚拟空命令。不要让我解释,我仍然无法理解它是如何解决任何问题的,但在我的情况下确实如此。
首先,声明一个DummyCommand
类:
/// <summary>
/// Workaround for the hyperlink click issue. What the hell is going on?
/// </summary>
public class DummyCommand : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
}
public event EventHandler CanExecuteChanged;
}
然后,在创建超链接时,请务必将DummyCommand
分配给Command
属性:
newSpan = new Span();
Run urlRun = new Run();
urlRun.Text = urlMatches[i].Value;
Hyperlink urlLink = new Hyperlink();
urlLink.NavigateUri = new Uri(urlMatches[i].Value, UriKind.Absolute); // Add URI to the Hyperlink control
urlLink.Click += urlLink_Click; // Add event handler to control
urlLink.Command = new DummyCommand(); // Workaround for the Click not been triggered
urlLink.Inlines.Add(urlRun); // Add text to Hyperlin
然后抓住你的头,继续前进。