2010-04-03 101 views
0

在我的應用我有給WPF設計模式默認對象

<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

回答

0

你需要確保設計人員可以得到「XPOS」和「YPos」的有效副本,它們都是值相同在運行時。

可能是您的DataContext未在視圖中正確設置,因此轉換器爲空。如果將DataContext設置爲有效對象(可以是設計時間數據),那麼代碼應該在轉換器中沒有默認值的情況下工作。

1

嘗試將回退值放到綁定中。這就是我所做的,讓設計模式中的東西顯示爲「彷彿」。

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

HTH

+0

這讓我很開心。我在一些文本塊上多重綁定了幾個依賴項屬性。他們在設計師看來很空白,這很煩人,但這個小竅門解決了這個問題。它允許我處理定位,文本格式等。 – 2014-04-30 14:49:08