2012-02-29 20 views
0

XAMLコードを使用してenumtypeを取得するusercontrolを実装したいと思います。データ型を受け取ることができるプロパティを実装するにはどうすればいいですか?私がこれまで試したことは次のとおりです。後ろにUserControlの独自のDataTypeプロパティを実装する方法

コード:

public partial class Test : UserControl, INotifyPropertyChanged 
{ 
     #region DependencyProperty: EnumType 
     public Type EnumType 
     { 
      get 
      { 
       return (Type)GetValue(EnumTypeProperty); 
      } 
      set 
      { 
       SetValue(EnumTypeProperty, value);     
      } 
     } 

     public static readonly DependencyProperty EnumTypeProperty = 
      DependencyProperty.Register("EnumType", typeof(Type), typeof(Test), 
      new FrameworkPropertyMetadata()); 
     #endregion 
} 

そして、XAMLで、私はこの試みた:

...

<Grid> 
     <local:Test EnumType="{x:Type local:TestEnum}" /> 
</Grid> 

...

The TestEnum:

public enum TestEnum 
{ 
    eins, 
    zwei, 
    drei 
} 

しかし、それは動作しません。 EnumTypeプロパティが設定されていないようです。

どのようにすればよいのですか?

答えて

0

は、私はちょうどTestEnumタイプを使用し、あなたがあなたの財産の種類としてタイプを使用していた理由はわからない

public static DependencyProperty EnumValueProperty = DependencyProperty.Register("EnumValue", typeof(TestEnum), typeof(Test), new PropertyMetadata(null)); 

    public TestEnum EnumValue 
    { 
     get { return (TestEnum)GetValue(EnumValueProperty); } 
     set { SetValue(EnumValueProperty, value); } 
    } 

<local:Test EnumValue="eins"/> 

を試してみてください。

ビルドエラーが発生しますか?私はしばしば、コントロールが再び構築されるまでXAMLエディタでintellisenseが失敗することがあることをよく知っています。

EDIT

謝罪、私はスティックの完全な間違った終わりだ、私は、しかし、私は有効なタイプのように列挙型を見ることはありません、コンパイルして実行するようにコードを得ることができましたインテリセンス。

+0

おそらくTestEnumは単なる例です。 EnumTypeプロパティは、任意の型に設定可能である必要があります。 –

+0

私は、プロパティのデータ型が列挙型ではなく "Type"であることを意味しています: public * Type * EnumType –

+0

@ bobsmith833、申し訳ありません、 –

2

あなたはそれが機能していないと思いますか?私はPropertyChangedCallbackを追加し、上記のコードを試してみました:

public static readonly DependencyProperty EnumTypeProperty = 
     DependencyProperty.Register("EnumType", typeof(Type), typeof(Test), 
     new FrameworkPropertyMetadata(MyCallBack)); 

    private static void MyCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     // See if we reach this point 
    } 

をそして、予想通り、あなたが必要とTestEnumにタイプ値を割り当てる、と呼ばれているように見えます。

+0

私は見ています - 私はちょうど不動産の場所を変えて見ました!すべてのあなたの答えのために多くの皆さんありがとう - 私をもう一度助けて! 親指アップ! – Michael

関連する問題