检测字符串是否为网址

时间:2016-08-19 15:40:46

标签: c# wpf xaml mvvm

我正在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。

2 个答案:

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