私は基本的に、ボタンにいくつかの追加情報を保存して後で使用するためのプロパティをいくつか追加しようとしています。 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;
}
}
何らかの理由で、私はこれらのDependencyPropertiesを宣言しても拡張機能と同じように機能していると仮定していました。 Class1をButtonから継承させ、親タイプをtypeof(Button)からtypeof(Class1)に変更するだけでした。私に正しい方向を指してくれてありがとう。 – Ben