我有一个简单的用户控件来显示文本块中的超链接:
LinkTextBlock.xaml:
<TextBlock >
<Hyperlink NavigateUri="{Binding Url, ElementName=root}" >
<TextBlock Text="{Binding Text, ElementName=root}" />
</Hyperlink>
</TextBlock>
LinkTextBlock.xaml.cs:
public static readonly DependencyProperty UrlProperty = DependencyProperty.Register("Url", typeof (string), typeof (LinkTextBlock));
public string Url
{
get { return (string) GetValue(UrlProperty); }
set { SetValue(UrlProperty, value); }
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof (string), typeof (LinkTextBlock));
public string Text
{
get { return (string) GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
然后,在ListBox的DataTemplate中我有:
<Controls:LinkTextBlock Text="{Binding Email}" Url="{Binding Email}" />
当我运行应用程序时,它似乎完美无缺。控件正确显示超链接,没有明显的问题。但是,当我查看“输出”窗口时,我得到了异常,每个ListBox项都有一个异常:
System.Windows.Data错误:22:不能 将''从类型''转换为 输入'en-US'文化的'System.Uri' 默认转换;考虑 使用Binding的Converter属性。 NotSupportedException异常:的“System.NotSupportedException: UriTypeConverter无法转换 (空值)。在 System.ComponentModel.TypeConverter.GetConvertFromException(对象 价值) System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo文化,对象 价值) System.UriTypeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo文化,对象 价值) MS.Internal.Data.DefaultValueConverter.ConvertHelper(对象 o,输入destinationType, DependencyObject targetElement, CultureInfo文化,布尔 isForward)'
为什么会这样?我知道绑定错误是绑定到NavigateURI的结果。 你有什么建议吗?我能做些什么呢?我非常感谢您的投入。
由于
答案 0 :(得分:3)
我明白了。问题是在执行从字符串到Uri的隐式转换时,因为NavigateUri的类型为Uri。 我需要创建一个转换器来将字符串转换为Uri,将我的属性从String更改为Uri,并且一切正常,没有例外。
答案 1 :(得分:-1)
不应该这个
<TextBlock >
<Hyperlink NavigateUri="{Binding Url, ElementName=root}" >
<TextBlock Text="{Binding Text, ElementName=root}" />
</Hyperlink>
</TextBlock>
是吗?
<TextBlock Text="{Binding Text, ElementName=root}">
<Hyperlink NavigateUri="{Binding Url, ElementName=root}" />
</TextBlock>