【问题标题】:Is it possible to get x:Name of a DependencyObject (Silverlight)?是否可以获得 x:Name of a DependencyObject (Silverlight)?
【发布时间】:2011-03-04 11:29:16
【问题描述】:

我有一个 DependencyObject(一种交互行为),我想从代码中获取它的 x:Name(只是获取,而不是设置)。有可能吗?

编辑:按照 AnthonyWJones 的回答:

我已将以下代码插入到我的基本行为中:

[EditorBrowsable(EditorBrowsableState.Never)]
public string Name
{
    get { return (string)GetValue(NameProperty); }
    set { SetValue(NameProperty, value); }
}

public static readonly DependencyProperty NameProperty =
            DependencyProperty.Register("Name", typeof(string), typeof(BaseBehavior<T>), new PropertyMetadata(null));

我已经给出了我的行为 x:Name,但 Name 属性没有被填充。

【问题讨论】:

    标签: silverlight silverlight-4.0 dependencyobject


    【解决方案1】:

    如果您希望您的 Name 属性与 x:Name XAML 名称相同,那么不要实现您自己的依赖属性,而是搭载已注册的现有依赖属性。您可以简单地将您的 name 属性实现为:

    public string Name
    {
        get { return (string) base.GetValue(FrameworkElement.NameProperty); }
        set { base.SetValue(FrameworkElement.NameProperty, value); }
    }
    

    【讨论】:

      【解决方案2】:

      如果派生自DependencyObject 的类没有公开Name 属性,则您无法确定分配的x:Namex:Name 值仅存储在内部对象树中,没有 API 可将值(对象)解析回键值(名称)。

      但是,如果这是您自己的行为,那么只需将 Name 依赖属性添加到您的行为中即可。 x:Name 将为 Name 属性分配值(如果存在)。

      如果这是一个现有的行为,您可以从它继承来创建一个具有Name 属性的新类。不幸的是,有些行为是封闭的,所以你不能总是这样做。

      【讨论】:

      • @AnthonyWJones:那么,您知道为什么它不起作用吗?
      • @TDaver:这很奇怪,试试 Name 而不是 x:Name。
      • 如果我从 xaml 设置 Name,它可以工作,如果我设置 x:Name 它不会(并且没有,我的意思是 DependencyProperty NameProperty 没有设置)
      【解决方案3】:

      您可以创建“名称”AttachedProperty,并使用NameAttachedProperty.GetName(DependencyObject)

      当然,您必须在使用前将其附加到您的元素上。

      public static class NameAttachedProprty
      {
          public static readonly DependencyProperty NameProperty =
              DependencyProperty.RegisterAttached("Name", typeof (string), typeof (NameAttachedProprty), new PropertyMetadata(default(string)));
      
          public static void SetName(DependencyObject element, string value)
          {
              element.SetValue(NameProperty, value);
          }
      
          public static string GetName(DependencyObject element)
          {
              return (string) element.GetValue(NameProperty);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 2013-05-22
        • 1970-01-01
        相关资源
        最近更新 更多