【发布时间】:2011-04-27 16:34:52
【问题描述】:
如果控件没有指定名称或 ID,它是否仍然是唯一的,或者更好的是,它可以在代码中完全访问吗?此外,如果它仍然可以识别,是什么决定了它与其他没有名称或 ID 的控件的关系?
【问题讨论】:
标签: c# .net wpf silverlight xaml
如果控件没有指定名称或 ID,它是否仍然是唯一的,或者更好的是,它可以在代码中完全访问吗?此外,如果它仍然可以识别,是什么决定了它与其他没有名称或 ID 的控件的关系?
【问题讨论】:
标签: c# .net wpf silverlight xaml
它仍然是唯一的每个对象。它继承自 Object。
要查看您还可以与另一个对象进行比较的哈希码,您可以使用以下代码:
XAML 示例:
<Grid Name="BaseGrid">
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="73,34,0,0" VerticalAlignment="Top" Width="75" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="73,101,0,0" VerticalAlignment="Top" Width="75" />
</Grid>
可视化 HashCode 的代码:
foreach (UIElement child in BaseGrid.Children)
{
MessageBox.Show(child.GetHashCode().ToString());
}
但回到你的问题“什么决定了它与其他控件的关系”:每个对象都是指向堆上内存区域的指针。 XAML 只是告诉编译器如何加载对象。加载后它们被内存地址引用。
【讨论】:
从技术上讲是的,控件的每个实例都是类的唯一实例。您可以通过引用访问控件。诀窍在于识别您感兴趣的唯一控件,因为它没有名称或 ID。
它是对控件的引用,它唯一地标识控件而不考虑 ID/Name,它是控件在控件层次结构中的位置,它定义了控件之间的关系。例如,根控件可能有零个或多个子控件,并且每个控件都可能有自己的子控件。该名称是一种在层次结构中定位控件并为控件提供有意义的标识符以与控件的特定实例交互的便捷方式。
【讨论】:
控件在其父项的子列表中具有位置 - 因此可以通过从顶部元素开始并获取包含您感兴趣的控件的特定子项来识别每个控件。
请查看此答案 - How can I find WPF controls by name or type? 了解详情。
【讨论】: