C# 使用XAMLParser分析文本框,无法了解如何管理超链接事件
我有一个解析器XamlReader.ParsexamlFile,我需要解析其中的超链接。 我有一个文本块,它支持超链接,但不知道如何使我想要的单词可单击。您可以使用VisualTreeHelper将所有匹配的文本替换为超链接 以下是一个示例: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
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进行语法分析。。。我不知道如何处理已解析元素的单击事件