我有一个解析器XamlReader.Parse(xamlFile)
,我需要在其中解析超链接。
我有TextBlock
(它支持超链接),但不知道如何使我想要的单词可以点击。
答案 0 :(得分:0)
您可以使用VisualTreeHelper
来替换所有匹配的文字Hyperlink
。
以下是一个示例:
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而言,我认为你拥有自己实现的所有元素。
享受!