[英]Can you StringFormat the NavigateUri property for Hyperlinks during XAML property databinding?
有沒有簡單的方法可以將字符串轉換或格式化為WPF數據綁定的一部分?
假設我想基於字符串標簽創建WPF超鏈接元素。
<Hyperlink NavigateUri="{Binding Tag}">
<Run Text="{Binding Tag}" />
</Hyperlink>
但是我需要先轉換NavigateUri屬性的Tag,以使其成為真正的超鏈接或PackUri。
例如,如果我的標簽是“ folksonomy”,我想創建一個字符串,例如: http://www.example.com/tags/tagview?tag=folksonomy
: http://www.example.com/tags/tagview?tag=folksonomy
tag=folksonomy
實現此目標的最佳方法是什么? XAML中是否有字符串處理功能? 我必須寫一個轉換器嗎? 我是否需要構建整個單獨的ViewModel類來進行一些字符串格式化?
更新:超鏈接元素似乎發生了一些奇怪的事情。 我可以得到答案中建議的StringFormat語法,以用於普通TextBlock的Text屬性,而不適用於Hyperlink的NavigateUri屬性。
正如一個答案指出的那樣,這很可能是由於NavigateUri屬性正式采用了Uri,而不是字符串。 顯然,將需要一個自定義轉換器或ViewModel屬性。
您可以使用綁定的字符串格式化功能:
<Hyperlink NavigateUri="{Binding Tag, StringFormat=http://www.example.com/tags/tagview?tag={0}}">
<Run Text="{Binding Tag}" />
</Hyperlink>
就像肯特(Kent)所說的,假設您使用的是.NET 3.5 SP1(可以將字符串格式作為SP1的一部分添加),則可以使用字符串格式。 此處的好樣本: http : //blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx
如果您不在.NET 3.5 SP1上,或者字符串格式方法變得凌亂,您可能需要我們一個IValueConverter http://msdn.microsoft.com/zh-cn/library/system.windows.data.ivalueconverter.aspx
對於在此線程中絆腳石尋求解決方案的其他人,我發現Foovanadil提出的IValueConverter建議對我來說效果很好。
<TextBlock>
<Hyperlink Name="lnkGoogle" NavigateUri="{Binding Path=Alert.Query,Converter={View:UriConverter},ConverterParameter=google}" RequestNavigate="Hyperlink_RequestNavigate">
Find news on Google
</Hyperlink>
</TextBlock>
在我的代碼后面有轉換器類:
public class UriConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string address = string.Empty;
switch ((string)parameter)
{
case "google":
address = "http://www.google.co.uk/news?q=" + value;
break;
}
Uri path = new Uri(@address);
return path;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
public override object ProvideValue(System.IServiceProvider serviceProvider)
{
return this;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.