检测字符串是否为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有效性的boolean
属性。然后在XAML中,您可以在GridViewColumn.CellTemplate
的datatemplate
中有两个控件,一个是超链接,另一个是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;
}