C# 使用XAMLParser分析文本框,无法了解如何管理超链接事件

C# 使用XAMLParser分析文本框,无法了解如何管理超链接事件,c#,wpf,xaml,hyperlink,C#,Wpf,Xaml,Hyperlink,我有一个解析器XamlReader.ParsexamlFile,我需要解析其中的超链接。 我有一个文本块,它支持超链接,但不知道如何使我想要的单词可单击。您可以使用VisualTreeHelper将所有匹配的文本替换为超链接 以下是一个示例: void CreateLinks(FrameworkElement fe) { Uri URI = new Uri("http://google.com"); TextBlock tb = fe as TextBlock; if

我有一个解析器XamlReader.ParsexamlFile,我需要解析其中的超链接。 我有一个文本块,它支持超链接,但不知道如何使我想要的单词可单击。

您可以使用VisualTreeHelper将所有匹配的文本替换为超链接

以下是一个示例:

void CreateLinks(FrameworkElement fe)
{
    Uri URI = new Uri("http://google.com");

    TextBlock tb = fe as TextBlock;
    if (tb != null)
    {
        string[] tokens = tb.Text.Split();

        tb.Inlines.Clear();

        foreach (string token in tokens)
        {
            if (token == "Click")
            {
                Hyperlink link = new Hyperlink { NavigateUri = URI };
                link.Inlines.Add("Click");
                tb.Inlines.Add(link);
            }
            else
            {
                tb.Inlines.Add(token);
            }

            tb.Inlines.Add(" ");
        }

        tb.Inlines.Remove(tb.Inlines.Last());
    }
    else
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(fe); ++i)
        {
            CreateLinks(VisualTreeHelper.GetChild(fe, i) as FrameworkElement);
        }
    }
}

public MainWindow()
{
    InitializeComponent();

    Loaded += (s, a) =>
        {
            FrameworkElement root = XamlReader.Parse("<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><TextBlock>Click Click Clock Clack Click</TextBlock></Grid>") as FrameworkElement;

            CreateLinks(root);

            grid.Children.Add(root);
        };
}
当然,为了确保文本的格式准确,您可能需要更精细一些;使用快速而肮脏的实现,我将丢失连续的空格,并且我不会处理模式包含空格的情况

因此,您可以通过使用正则表达式来增强它,但就WPF而言,我认为您拥有所有元素来实现自己的实现


享受吧

不,这对我没有帮助。。。我正在对这个XAML进行语法分析。。。我不知道如何处理已解析元素的单击事件