【问题标题】:Setting and Retrieving the x:Name attribute for a XAML object设置和检索 XAML 对象的 x:Name 属性
【发布时间】:2013-12-24 08:27:20
【问题描述】:

考虑这个 WPF3D XAML sn-p,记住声明的对象继承FrameworkElement

<Visual3D x:Name="SomeName" />

如何在代码中检索x:Name 的值指定的字符串?是的,它在构建时被声明为代码隐藏访问的符号,但是如果您要将具有非FrameworkElement 根的逻辑树转换为不同的格式,则没有定义FrameworkElement.NameProperty.GetValue()

【问题讨论】:

  • 否;这是关于 WPF 的 XAML 实现的行为和功能的问题,低于开发模式的级别。
  • 是否有可能遍历可视化树以按类型获取此元素?
  • 否;我们正在“转换具有非框架元素根的逻辑树”。无法遍历可视化树,因为 XAML 元素不是 FrameworkElements。
  • 能否提供更大的sn-p代码? Visual3D 是否包含在 Viewport3D 中?
  • 这会分散问题的注意力,该问题询问如何从对象中获取 x:Name 值。它可能是一个非 FrameworkElement 对象,它不是 Visual3D

标签: wpf xaml


【解决方案1】:

您可以创建一个继承自 Visual 3D 类的类,并在该类上添加 RuntimeNameProperty 属性以及用于保存名称的属性。

【讨论】:

  • 我可以,这是引发这个问题的讨论点之一。但是该类可能是sealed,否则我将无法定义附加属性。 x:Name 的优势在于其规范性;每个 XAML 元素都可以采用 x:Name
  • 我认为没有其他方法可以直接检索 x:Name 属性(这就是 FrameworkElement 填写 Name 属性的方式)
【解决方案2】:

似乎没有直接的方法可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多