2

拥有AttachedPropertiesas privatevs有什么意义public?通常它被定义为(示例):

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 方法也是私有的,这可能是有意义的 (例如,在需要存储一些行为本地数据的附加行为中)但不是其他情况(我认为我从未见过这种情况)公共获取和设置)。

当你想使用DependencyPropertyis的一个例子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 设置的绑定GetValue和值。SetValue

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

如果您查看该框架,您会注意到所有公共附加属性都有一个公共属性DependencyProperty,例如Grid.RowPropertyStoryboard.TargetNameProperty。因此,如果附加属性是公共的,请使用公共DependencyProperty

于 2011-09-20T06:48:46.723 回答