检测字符串是否为url

本文关键字:url 是否 字符串 检测 | 更新日期: 2023-09-27 18:03:05

我从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。

检测字符串是否为url

解决这个问题的一种方法是创建一个表示URL有效性的boolean属性。然后在XAML中,您可以在GridViewColumn.CellTemplatedatatemplate中有两个控件,一个是超链接,另一个是TextBlock。您必须使用触发器根据Boolean属性更改控件的可见性:

                <DataTemplate>
                <Grid>
                    <TextBlock Visibility="Collapsed" Name="Hyperlink">
            <Hyperlink NavigateUri="{Binding Data.path}">
            </Hyperlink>
                    </TextBlock>
            <TextBlock Visibility="Collapsed" Name="simpleText"
                       Text="{Binding Data.path}"></TextBlock>
                </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Data.IsValidURL}" //your boolean property
                                 Value="True">
            <Setter TargetName="Hyperlink"
                                Property="Vibility"
                                Value="Visible" />
                    </DataTrigger>
            <DataTrigger Binding="{Binding Data.IsValidURL}" //your boolean property
                                 Value="False">
            <Setter TargetName="simpleText"
                    Property="Vibility"
                    Value="Visible" />
            </DataTrigger>
            <DataTemplate.Triggers>
            </DataTemplate>

检查字符串是否为有效url:

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