2

AttachedPropertiesとして持つことはどこに意味がありますか?通常、それは(例)として定義されます:privatepublic

public static readonly DependencyProperty CommandProperty = 
DependencyProperty.RegisterAttached(
            "Command",
            typeof(ICommand),
            typeof(Click),
            new PropertyMetadata(OnSetCommandCallback));

しかし、私はいくつかのプロパティがprivate static readonly...

CommandProperty上記を今に変更するとどうprivateなりますか?そうすれば、XAMLインテリセンスでまだ利用できるようです。ここで何が欠けていますか?

4

1 に答える 1

4

DependencyProperty違いは、クラスの外部からにアクセスできないことです。これは、静的なGetメソッドとSetメソッドもプライベート である場合(たとえば、いくつかの動作のローカルデータを格納する必要がある添付の動作で)は意味がありますが、そうでない場合は意味がありません(そして私はこれを見たことがないと思いますpublic Get and Set)。

を使用する場合の例はDependencyPropertyですDependencyPropertyDescriptor。パブリックDependencyPropertyを使用すると、次のことができます

DependencyPropertyDescriptor de =
    DependencyPropertyDescriptor.FromProperty(Click.CommandProperty, typeof(Button));

de.AddValueChanged(button1, delegate(object sender, EventArgs e)
{
    // Some logic..
});

ただし、DependencyPropertyがプライベートの場合、上記のコードは機能しません。

ただし、所有者クラスはプライベートにアクセスできるため、以下はパブリックとプライベートの両方で正常に機能しDependencyProperty ます(静的なGetメソッドとSetメソッドがパブリックの場合)DependencyProperty。これは、Xamlを介して設定されたバインディングと値にも当てはまります。ここでGetValueSetValueは直接呼び出されます。

Click.SetCommand(button, ApplicationCommands.Close);
ICommand command = Click.GetCommand(button);

フレームワークを見ると、パブリックにアタッチされたすべてのプロパティにパブリックがあります。DependencyPropertyたとえばGrid.RowProperty、とStoryboard.TargetNameProperty。したがって、添付プロパティがパブリックである場合は、パブリックを使用してくださいDependencyProperty

于 2011-09-20T06:48:46.723 に答える