WPF 转换器转换导致 Visual Studio 设计器异常
Posted
技术标签:
【中文标题】WPF 转换器转换导致 Visual Studio 设计器异常【英文标题】:WPF Converter casting causes Visual Studio designer exception 【发布时间】:2011-01-03 02:12:08 【问题描述】:如下所示的转换器将导致 2008 Visual Studio Designer 不显示 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;
我的问题是,Visual Studio 设计器的 wtf 有问题吗?而且,有没有更好的方法将这些对象投射到它们对应的 Enum 中,这样设计者就不会出错?
【问题讨论】:
"wtf 是不是 Visual Studio 设计器有问题?"我有一个列表,但是这个 Internet 太小,无法包含它。 你能在你使用这个转换器的地方发布 XAML 吗? 【参考方案1】:我认为这可能会发生,因为有时会使用错误的参数调用转换器。您可以按照以下步骤在设计器中调试调用转换器:
启动新的 Visual Studio 实例 附加到第一个 VS 实例(工具 -> 附加到进程) 打开转换器源文件 在 Convert 方法中设置断点 在第一个 VS 实例中重新加载 WPF 设计器这样你应该能够检查传递给转换器的参数
【讨论】:
设计器正在发送一个 DependencyProperty.UnsetValue。感谢您提供有关调试设计器的提示。 从 Visual Studio 2012 开始,WPF 设计器在名为 XDesProc.exe 的单独进程中运行。您应该从 Visual Studio 的新实例附加到此进程。【参考方案2】:我认为设计者正在处理第一个示例中的转换器并且无法转换,因为 values[0] 和 values[1] 为空。如果您确实检查 null 那么这应该可以解决问题。第二个示例本质上是在使用“is”关键字时检查 null。
【讨论】:
将 null 转换为任何东西(引用类型)不会引发异常。更可能的原因是 values[0] 和 values[1] 应该互换... @Aviad,枚举不是引用类型,它们是值类型...将 null 转换为值类型会引发 NullReferenceException以上是关于WPF 转换器转换导致 Visual Studio 设计器异常的主要内容,如果未能解决你的问题,请参考以下文章
为什么VS(visual studio)中会建议宏 #define 转换为constexpr?
将 C++ 项目从 Visual Studio 2008 转换为 Visual Studio 2010
从 Visual Studio 2013 转换到 Visual Studio 2015 的问题
是否需要将 Visual Studio Express 解决方案转换为 Visual Studio Professional 解决方案?
使用部分类和设计器文件将 Visual Studio 2003 表单转换为 Visual Studio 2005/2008 表单