为WPF设计模式提供默认对象

时间:2010-04-03 01:12:21

标签: c# wpf default-value

在我的申请中我有

    <Rectangle.Margin>
    <MultiBinding Converter="{StaticResource XYPosToThicknessConverter}">
        <Binding Path="XPos"/>
        <Binding Path="YPos"/>
    </MultiBinding>
</Rectangle.Margin>

数据上下文在运行时设置。该应用程序工作,但VS中的设计窗口不显示预览,但显示System.InvalidCastException。这就是为什么我在XYPosToThicknessConverter中添加了一个丑陋的默认对象。

class XYPosToThicknessConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
     // stupid check to give the design window its default object.
        if (!(values[0] is IConvertible))
            return new System.Windows.Thickness(3, 3, 0, 0);
    // useful code and exception throwing starts here
    // ...
    }
}

我的问题:

  • VS /构建设计窗口的过程传递给XYPosToThicknessConverter以及自己找出它的方法是什么。
  • 如何更改我的XAML代码,以便设计窗口获取其默认对象,这是处理此问题的最佳方法吗?

我正在使用VS2010RC和Net4.0

2 个答案:

答案 0 :(得分:1)

尝试将后备值添加到绑定中。这就是我在设计模式中显示'好像'的东西。

Something="{Binding Smthing, FallbackValue='hello world'}"

HTH

答案 1 :(得分:0)

您需要确保设计人员能够获得“XPos”和“YPos”的有效副本,并且它们与运行时的值相同。

您可能无法在视图中正确设置DataContext,因此转换器将变为空。如果将DataContext设置为有效对象(可以是设计时数据),则代码应该在没有转换器默认值的情况下工作。