我正在xaml文件中的数据集中打印出一个url。问题是,如果字符串是有效的URL,我只需要创建一个超链接。
我知道如何在大多数语言中执行此操作,但不知道如何在WPF中执行此操作。我正在寻找有用的东西;
if(isurl)
display hyperline gridrow
else
display string gridrow
目前我的xaml是;
<u:GridViewColumnEx x:Uid="column_4" Width="225" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink>
<TextBlock Text="{Binding Data.path}"/>
</Hyperlink>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</u:GridViewColumnEx>
但是这会将列中的所有内容显示为超链接(显然)。我已经阅读了关于触发器的内容,但我不确定这是否是我所追求的。我已经阅读了很多关于触发器的内容,但我不确定如何根据返回值更改xaml。
答案 0 :(得分:1)
解决此问题的一种方法是创建一个boolean
属性,指示URL的有效性。
然后在XAML中,您可以在datatemplate
的{{1}}中有两个控件,一个是超链接,另一个是TextBlock。您必须使用触发器基于布尔属性更改控件的可见性:
GridViewColumn.CellTemplate
答案 1 :(得分:1)
检查字符串是否为有效网址:
bool CheckUrl(string urlString)
{
if(Uri.TryCreate(urlString, UriKind.Absolute, out uriResult))
{
return (uriResult.Scheme == Uri.UriSchemeHttp);
}
return false;
}
要使文本成为基于true或false的超链接,请从Xaml中删除超链接元素。您将基于URL以编程方式创建超链接。
if(CheckUrl(urlString))
{
TextBlock.Inlines.Add(new Hyperlink (new Run("Click me")){NavigateUri = new Uri("urlString",UriKind.Absolute) });
}
else
{
TextBlock.Text = urlString;
}