即使没有名称或ID,控件也是唯一的吗?

时间:2011-04-27 16:34:53

标签: c# .net wpf silverlight xaml

如果一个控件没有给出一个名字或一个id它仍然是唯一的,或者更好但是它可以在代码中被访问吗?此外,如果它仍然可以识别什么决定了它与其他没有名字或ID的控件之间的身份?

3 个答案:

答案 0 :(得分:3)

从技术上讲,它们是,控件的每个实例都是类的唯一实例。您可以通过引用访问控件。诀窍是确定哪个唯一控件是您感兴趣的控件,因为它没有名称或ID。

它是对控件的引用,无论ID / Name如何都唯一地标识控件,它是控件层次结构中控件的位置,用于定义控件之间的关系。例如,根控件可能具有零个或多个子控件,并且每个控件可能具有自己的子控件。该名称是在层次结构中定位控件并为控件提供有意义的标识符以与控件的特定实例进行交互的便捷方式。

答案 1 :(得分:3)

它作为每个对象仍然是唯一的。它继承自Object。

要查看您还可以与另一个对象进行比较的Hashcode,您可以使用以下代码:

示例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只是告诉编译器如何加载对象。加载后,它们被内存地址引用。

答案 2 :(得分:1)

控件在其父级子列表中具有位置 - 因此可以通过从top元素开始并获取包含您感兴趣的控件的特定子级来识别每个控件。

请查看此答案 - How can I find WPF controls by name or type?了解详情。