我什么时候应该使用 FrameworkPropertyMetadata 或 UIPropertyMetadata 而不是普通的 PropertyMetadata?

发布于 2024-08-26 17:22:16 字数 165 浏览 9 评论 0原文

在查看示例附加属性和行为时,我发现了 FrameworkPropertyMetadataUIPropertyMetadataPropertyMetadata 的混杂使用。既然它们都形成了继承层次结构,那么我该如何选择使用哪一个呢?

When looking at sample attached properties and behaviors, I've seen a mishmash of uses of FrameworkPropertyMetadata, UIPropertyMetadata and PropertyMetadata. Since they all form an inheritance hierarchy, how do I choose which one to use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽梦忆笙歌 2024-09-02 17:22:16

这些类将报告依赖属性的一些行为方面。

检查不同的类别以了解它们提供的选项。

例如,

如果您只想通过 dp 返回属性并提供默认值,请使用 PropertyMetadata

如果您想指定动画行为,请使用 UIPropertyMetadata

但如果某些property 影响 wpf 框架级别的内容,例如元素布局、父布局或数据绑定,请使用 FrameworkPropertyMetadata。

详细信息您可以在 msdn http://msdn.microsoft.com/en-us 上查看/library/ms751554.aspx

These classes are to report some behavior aspects of a dependency property.

Check the different classes for the options they provide.

For example,

if you just want to back a property by dp and provide a default value, use PropertyMetadata,

if you want to specify animation behavior, use UIPropertyMetadata,

but if some property affects wpf framework level stuffs eg element layout, parent layout or databinding, use FrameworkPropertyMetadata.

Details you can check on msdn http://msdn.microsoft.com/en-us/library/ms751554.aspx

最舍不得你 2024-09-02 17:22:16

FrameworkPropertyMetadata 的一项有用功能是您可以定义行为 BindsTwoWayByDefault。否则,依赖属性默认为 OneWay

当您需要对依赖属性进行双向绑定时,通常您始终需要为每个绑定定义Mode=TwoWay。如果将此模式设置为默认模式,则无需再为每个绑定设置它。

您可以这样设置行为:

new FrameworkPropertyMetadata(_myDefaultValue_, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)

完整示例:

public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
    "IsSelected", typeof(bool), typeof(MyClass),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault);

public bool IsSelected
{
    get { return (bool)GetValue(IsSelectedProperty); }
    set { SetValue(IsSelectedProperty, value); }
}

One useful feature of FrameworkPropertyMetadata is that you can define the behaviour BindsTwoWayByDefault. Otherwise the dependency property is OneWay by default.

When you need a two way binding for a dependency property, then normally you always need to define Mode=TwoWay for each binding. If you set this mode as default, you don't need to set it for each binding anymore.

You set the behaviour like this:

new FrameworkPropertyMetadata(_myDefaultValue_, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)

Complete example:

public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
    "IsSelected", typeof(bool), typeof(MyClass),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault);

public bool IsSelected
{
    get { return (bool)GetValue(IsSelectedProperty); }
    set { SetValue(IsSelectedProperty, value); }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文