将AttachedProperties
作为private
vs public
有何意义?
通常它定义为(示例):
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached(
"Command",
typeof(ICommand),
typeof(Click),
new PropertyMetadata(OnSetCommandCallback));
但我也看到了一些属性为private static readonly...
如果我现在将上述CommandProperty
更改为private
会产生什么后果?如果我这样做,它似乎仍然可以在我的XAML intellisense中使用。我在这里缺少什么?
答案 0 :(得分:4)
不同之处在于您将无法从课堂外访问DependencyProperty
。如果静态Get和Set方法也是私有的,那么这是有意义的,(在附加行为中你需要存储一些行为本地数据)但不是其他方式(我不认为我用公开的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方法是公共的),因为所有者类可以访问私有{{1 }}。这也适用于通过Xaml设置的绑定和值,其中直接调用DependencyProperty
和GetValue
。
SetValue
如果您查看框架,您会注意到所有公开附加的媒体资源都有公开Click.SetCommand(button, ApplicationCommands.Close);
ICommand command = Click.GetCommand(button);
,例如DependencyProperty
和Grid.RowProperty
。因此,如果附加的财产是公开的,请使用公开Storyboard.TargetNameProperty