【问题标题】:Get attached property instance from dependency property change callback从依赖属性更改回调中获取附加属性实例
【发布时间】:2010-12-16 22:19:23
【问题描述】:

是否可以从附加属性类型上的属性更改回调中获取附加属性的实例?

换句话说,如果你有:

public class MyAttachedPropertyClass
{
      public static readonly DependencyProperty MyProperty = DependencyProperty.RegisterAttached(
        "My", typeof(int), typeof(MyAttachedPropertyClass), new FrameworkPropertyMetadata(0, OnMyPropertyChanged));

 private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
      //TODO: access instance of MyAttachedPropertyClass
    }
}

我需要访问 MyAttachedPropertyClass 的实例,以便我可以设置该类型上的另一个属性的值。

【问题讨论】:

  • 不确定我是否了解您想要做什么。你能详细说明一下吗?
  • 我在 MyAttachedPropertyClass 上有一个基于实例的字段,我需要将 OnMyPropertyChanged 中该字段的值设置为整数 e.NewValue 的值。因为 OnMyPropertyChanged 是静态的,所以我无法在静态上下文中访问此实例字段。
  • 我不确定我是否理解你的问题,或者你想做什么,但如果你只需要发生属性更改的对象实例(我对你的意思的最佳猜测远),这是您的“DependencyObject d”参数。
  • 我想我在这里找到了你的答案:stackoverflow.com/questions/2453146/…

标签: c# .net wpf attached-properties


【解决方案1】:

通常,至少根据我的经验,附加属性所拥有的类型是静态的。如果不是静态的,在设置附加属性时,不会实例化拥有类型的实例。如果那是你真正想要的,你将不得不做更多的工作。

基本上,您需要在某个时候自己实例化该实例,然后在您的OnMyPropertyChanged 中使其可访问,可能通过某种静态状态。

我不确切知道您想要实现什么,但作为替代方案,您可以在OnMyPropertyChanged 中的DependencyObject "d" 上设置其他附加属性。因此,如果您想保留某种状态,可以将其放在另一个附加属性中。

此时我突然想到,MyAttachedPropertyClass 可能是一种使用诸如GridDockPanel 之类的附加属性的控件。在这种情况下,MyAttachedPropertyClass 可能是DependencyObjectd”的父级,您可以使用VisualTreeHelper 类访问它。

此时,我只是在黑暗中寻找答案。如果您有更多关于您正在尝试做的事情的详细信息,我可能会为您提供进一步的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2014-06-14
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多