2011-01-15 10 views
4

私は基本的に、ボタンにいくつかの追加情報を保存して後で使用するためのプロパティをいくつか追加しようとしています。 ButtonをベースにしたUserControlを作成するのではなく、これを行うという私の選択は、コードが少なくて済むように思えたからです。DependencyPropertyをボタンに追加する方法は?

私はマイクロソフトのサイトで見た例を踏襲していますが、 "A 'Binding'は 'Button'タイプの 'SetSortIndicatorVisibility'プロパティで設定できません。 DependencyObjectのDependencyPropertyに設定する必要があります。 ButtonはDependencyObjectであり、DependencyPropertyを追加しているので意味がありません。私は当初はAttachedPropertyから始めましたが、それ以来私はそれを修正しました。私はこれに関連するすべてのコードを取得してテストプロジェクトに入れましたが、まだこのエラーが発生しています。このテストコードのすべては以下の通りです:

たDependencyPropertyの定義:

public static readonly DependencyProperty SortIndicatorVisibilityProperty = DependencyProperty.Register("SortIndicatorVisibility", typeof(Visibility), typeof(Button), new FrameworkPropertyMetadata(Visibility.Visible, FrameworkPropertyMetadataOptions.AffectsRender)); 

    public static void SetSortIndicatorVisibility(Button button, Visibility value) 
    { 
     button.SetValue(SortIndicatorVisibilityProperty, value); 
    } 
    public static Visibility GetSortIndicatorVisibility(Button button) 
    { 
     return (Visibility) button.GetValue(SortIndicatorVisibilityProperty); 
    } 

ウィンドウ新しいプロパティを持つボタンを含むXAMLと結合:

<Window x:Class="Testing.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ext="clr-namespace:Testing" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Button Content="Test" 
      Command="{Binding TestCommand}" 
      ext:Class1.SortIndicatorVisibility="{Binding SortIndicatorVisibilitySiteName}" /> 
</Grid> 

最後に、プロパティをDependencyPropertyは次の値にバインドされています。

public Visibility SortIndicatorVisibilitySiteName 
    { 
     get 
     { 
      return Visibility.Visible; 
     } 
    } 

答えて

4

任意のクラスに「通常」の依存プロパティを追加することはできません。これは添付プロパティでなければなりません。また、所有者の種類はButtonである必要はありません。プロパティを宣言するクラスである必要があります。

+0

何らかの理由で、私はこれらのDependencyPropertiesを宣言しても拡張機能と同じように機能していると仮定していました。 Class1をButtonから継承させ、親タイプをtypeof(Button)からtypeof(Class1)に変更するだけでした。私に正しい方向を指してくれてありがとう。 – Ben

0

attached Dependency propertyとの最初の試行は、あなたのゲッターとセッターが一貫していないため正しいと思います。

あなたのプロパティは、が添付された依存プロパティ( "Register"ではなく "RegisterAttached"を使用)ではなく、依存関係プロパティとして実際に登録されています。

+0

このMicrosoftのカスタム依存プロパティのページ - http://msdn.microsoft.com/en-us/library/ms753358 .aspx(申し訳ありませんが、このリンク可能にするコードを知らない)、カスタムプロパティをバインド可能にするには、そのプロパティを変更した理由が付属プロパティではなく、依存プロパティでなければなりません。 – Ben

+0

「添付プロパティとは対照的に」?あなたはそれをどこで見ましたか?ご覧のとおり、Thomas Levesqueの答えは私の答えです。 – JYL

関連する問題