如下所示的转换器将导致2008 Visual Studio设计器不显示xaml,并且错误输出“指定的转换无效”。异常。
public class ItemsVisibilityToGridColumnWidthConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
//THE TWO OFFENDING LINES...
var itemsVisibility = (Visibility)values[0];
var orientation = (Orientation)values[1];
if (orientation == Orientation.Horizontal && itemsVisibility != Visibility.Visible)
{
return new GridLength(0);
}
return new GridLength(4, GridUnitType.Star);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
更改演员表以使用此类方法可以解决问题:
static class EnumCaster
{
internal static Orientation CastAsOrientation(object value)
{
if (value is Enum)
{
return (Orientation)value;
}
return Orientation.Horizontal;
}
internal static Visibility CastAsVisibility(object value)
{
if (value is Enum)
{
return (Visibility)value;
}
return Visibility.Visible;
}
}
我的问题是,wtf是错误的Visual Studio设计师?并且,是否有更好的方法将这些对象转换为相应的Enum,以便设计师不会抛出适合的东西?
答案 0 :(得分:18)
我认为可能会发生这种情况,因为在某些时候,使用错误的参数调用转换器。您可以按照以下步骤调试设计器中的转换器调用:
这样你应该能够检查传递给转换器的参数
答案 1 :(得分:3)
我认为设计人员正在第一个例子中处理转换器,因为值[0]和值[1]为空,所以无法进行转换。如果你检查null,那么这应该解决问题。第二个示例基本上是在使用“is”关键字时检查null。