Windows Phone 8 Hyperlink.Click事件未触发

时间:2014-03-21 21:10:26

标签: c# wpf windows-phone-8 hyperlink windows-phone

我正在构建一个聊天应用程序,我正在解析链接并将它们添加到带有超链接的聊天室视图中。这些超链接具有以下事件处理程序:

    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

1 个答案:

答案 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

然后抓住你的头,继续前进。