2013-08-26 44 views
2

所以我在本例中引用了一個使用staticextension的枚舉,該運行時可以正常工作,但由於錯誤「無法創建類型爲'StaticExtension'的實例」而在設計時失敗。引用枚舉的WPF設計者問題

我明白這意味着它認爲它需要一個枚舉類型的實例來實際引用它。但是,枚舉在窗口中被定義爲靜態,所以我不明白爲什麼它有問題。

是否有任何合理的方法來保持設計師的工作?到目前爲止我發現的最接近的是將它放在objectdataprovider中,並創建返回枚舉值的方法。在幕後,這基本上是創建一個引用靜態類型的對象,並且似乎只是將枚舉值拉出而做了太多工作。這裏的目標僅僅是能夠引用單獨的枚舉類型並顯示它們。

<Window 
    x:Class="DaedalusGraphViewer.GraphViewerWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:DaedalusGraphViewer="clr-namespace:DaedalusGraphViewer"> 
<StackPanel> 
    <Label Content="testtesttest"> 
     <Label.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="{x:Static DaedalusGraphViewer:GraphViewerWindow+Test.test1}"/> 
     </ContextMenu> 
     </Label.ContextMenu> 
    </Label> 
    </StackPanel> 
</Window> 

C#:

using System.Windows; 

namespace DaedalusGraphViewer 
{ 
    /// <summary> 
    /// Interaction logic for GraphViewerWindow.xaml 
    /// </summary> 
    public partial class GraphViewerWindow : Window 
    { 
    public GraphViewerWindow() 
    { 
     InitializeComponent(); 
     Application.Current.MainWindow = this; 
    } 

    public enum Test 
    { 
     test1, test2 
    } 
    } 
} 

回答

3

這是設計師已知bug。解決方法是不要與設計器一起使用嵌套類型。

+0

我明白了。那真不幸。這意味着我必須用枚舉來污染命名空間或創建特定的枚舉命名空間。這是做事的常用方式嗎? –

+0

https://connect.microsoft.com/VisualStudio/feedback/details/361509/xaml-designer-cannot-handle-typename-with-nested-class在VNext中修復,因此可能是VS2k12。 – user7116

+0

@JamesJoshuaStreet:好的,嵌套枚舉*不是*慣例。就我個人而言,我不明白,爲什麼你稱之爲「污染命名空間」。例如,看看FCL,並將嵌套枚舉數與常規枚舉數進行比較。 – Dennis