可以';在绑定字符串上使用时,无法使简单的转换器工作
本文关键字:简单 工作 转换器 绑定 字符串 可以 | 更新日期: 2023-09-27 18:23:43
我定义了以下转换器(C#):
class BodyValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string s = value.ToString();
int prefixLength;
if (!int.TryParse(parameter.ToString(), out prefixLength))
return s;
return s.Substring(0, prefixLength);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
这将从传递的字符串的开头开始,并返回我指定为参数的字符数。
在我的XAML中,我实例化了转换器:
<local:BodyValueConverter x:Key="BodyValueConverter"/>
在尝试在文本块中使用此转换器时,我收到一个错误:
<DataTemplate x:Key="AppointmentTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Subject}"></TextBlock>
<TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock>
</StackPanel>
</DataTemplate>
错误为:
XAMLParseException:在"System.Windows.Markup.StaticResourceHolder"上提供值时引发异常。
第一个文本块可以很好地显示主题。第二行给了我一个例外。
XAML中对象的顺序是什么?
Converter
必须在实际使用前定义,因此请确保您的<Converter>
在Resources
中高于<DataTemplate>
另一种选择是切换到使用DynamicResource
而不是StaticResource
,因为DynamicResource
是在需要时评估的,而不是在加载XAML时评估的
当它找不到您要查找的静态资源时,通常会抛出该错误。您需要在静态资源中定义它。
<Window
.... snip ...
xmlns:local="clr-namespace:YourLocalNamespace"
<Window.Resources>
<local:BodyValueConverter x:Key="BodyValueConverter"/>
</Window.Resources>
.... snip ....
<DataTemplate x:Key="AppointmentTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Subject}"></TextBlock>
<TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock>
</StackPanel>
</DataTemplate>
</Window>
注意:这是您在Window中定义它的时候。你可以在其他地方定义它。
如果不是这个问题。。。。要找到解析错误的更详细解释…请查看内部异常文本。