Wpf 设置和检索XAML对象的x:Name属性

Wpf 设置和检索XAML对象的x:Name属性,wpf,xaml,Wpf,Xaml,考虑此WPF3D XAML片段,请记住声明的对象不会继承FrameworkElement: <Visual3D x:Name="SomeName" /> 在代码中,如何检索为x:Name的值指定的字符串?是的,它在生成时被声明为代码隐藏访问的符号,但是如果您要将具有非FrameworkElementroot的逻辑树转换为不同的格式,则没有FrameworkElement.NameProperty.GetValue()已定义。您可以创建一个继承自Visual 3D类的类,并在该类

考虑此WPF3D XAML片段,请记住声明的对象不会继承
FrameworkElement

<Visual3D x:Name="SomeName" />


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

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

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

没有;这是一个关于WPF的XAML实现在开发模式级别以下的行为和特性的问题。是否遍历可视化树以按类型获取此元素?否;我们正在“转换具有非FrameworkElement根的逻辑树”。无法遍历可视化树,因为XAML元素不是框架元素。能否提供更大的代码片段?
Visual3D
是否包含在
Viewport3D
中?这会分散对问题的注意力,该问题询问如何从对象获取x:Name值。它可能是一个非FrameworkElement对象,它不是
Visual3D
,我可以,这是引发这个问题的讨论点之一。但是类可能是密封的,或者我不能定义附加属性。
x:Name
的优点在于其规范性;每个XAML元素都可以使用
x:Name
。我认为没有其他方法可以直接检索x:Name属性(这就是FrameworkElement填充Name属性的方式)