2010-01-08 102 views
4

如下所示的轉換器將導致2008 visual studio designer不顯示xaml,並且出現「指定的轉換無效」錯誤。例外。WPF Converter轉換器導致Visual Studio設計器異常

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的設計師?而且,是否有更好的方式將這些對象投射到相應的枚舉中,以便設計者不會拋出合適的東西?

+1

「wtf與Visual Studio設計器錯誤嗎?」我有一個列表,但這個互聯網太小,不能容納它。 – itowlson 2010-01-08 21:03:25

+0

您可以在使用此轉換器的位置發佈XAML嗎? – 2010-01-08 21:22:11

回答

18

我想可能會發生這種情況,因爲在某些時候,轉換器被調用的參數很糟糕。您可以通過以下步驟調試呼叫在設計轉換器:

  • 啓動Visual Studio的新實例
  • 連接到第一VS實例(工具 - >附加到進程)
  • 打開轉換器的源文件
  • 將斷點在Convert方法
  • 重裝WPF設計在第一VS實例

那方式你應該能夠檢查傳遞給轉換器的參數

+2

+ 1爲設計師調試轉換器上的漂亮提示 – mattythomas2000 2010-01-08 21:39:50

+2

設計者發送一個DependencyProperty.UnsetValue。感謝關於調試設計者的提示。 – 2010-01-08 23:29:36

+1

從Visual Studio 2012開始,WPF設計器運行在名爲XDesProc.exe的單獨進程中。您應該從Visual Studio的新實例附加到此過程。 – 2013-10-31 15:54:25

3

我認爲設計者正在處理第一個例子中的轉換器,並且無法投射,因爲值[0]和值[1]爲空。如果你檢查null,那麼這應該可以解決問題。第二個例子主要是在使用「is」關鍵字時檢查null。

+0

將null投射到任何東西(引用類型)不會引發異常。更可能的原因是值[0]和值[1]應該交換... – 2010-01-08 21:18:35

+3

@Aviad,枚舉不是引用類型,它們是值類型...將null值轉換爲值類型拋出NullReferenceException – 2010-01-08 21:27:49

相關問題