我写了一个转换器BoolToStringConverter。转换器有两个属性TrueString和FalseString。这是我在XAML中使用它的方式
<UserControl.Resources>
<local:BooleanToStringConverter x:Key="BooleanToStringConverter" TrueString="{Binding Strings.Open, Source={StaticResource MyStrings}}"></local:BooleanToStringConverter>
</UserControl.Resources>
这编译好了,但运行时我得到了一个xml解析异常。如果我将TrueString属性的设置更改为TrueString =“Open”,则一切正常。
这是使用的转换器:
<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}}" Command="{Binding MyCommand}" VerticalAlignment="Top" Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>
任何想法有什么不对?我想做的就是将本地资源的属性设置为本地化值。
编辑这是我的转换器类
public class BooleanToStringConverter : IValueConverter
{
public BooleanToStringConverter()
{
}
public string TrueString
{
get;
set;
}
public string FalseString
{
get;
set;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool boolValue = System.Convert.ToBoolean(value, CultureInfo.InvariantCulture);
return boolValue ? TrueString : FalseString;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这是运行时异常消息:
System.Windows.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常
附加信息:设置属性'Optimize.Client.Presentation.BooleanToStringConverter.FalseString'抛出异常。 [线路:18位置:86]
答案 0 :(得分:0)
您无法绑定到TrueString
和FalseString
属性。来自MSDN help:
为了成为绑定的目标,属性必须是依赖属性
您可以尝试使用绑定的ConverterParameter部分作为xaml
<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}, ConverterParameter=Open}"
Command="{Binding MyCommand}" VerticalAlignment="Top"
Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>
您还可以使转换器不那么通用,只处理打开/关闭字符串。
另一个选择是让您的值转换器扩展DependencyObject,并将您的属性转换为DependencyProperties。
答案 1 :(得分:0)
您还可以在XAML中设置公共属性,如下所示:
<localHelpers:BoolToTextConverter x:Key="boolToTextConverter">
<localHelpers:BoolToTextConverter.TrueText>
Sent
</localHelpers:BoolToTextConverter.TrueText>
<localHelpers:BoolToTextConverter.FalseText>
Not Sent
</localHelpers:BoolToTextConverter.FalseText>
</localHelpers:BoolToTextConverter>
完整示例位于我的博文here.
上