如何在代码中访问x:Name-property?

时间:2010-09-22 19:51:01

标签: c# .net wpf xaml

我将XAML文件中的x:Name分配给可以触发MouseDown事件的对象。 在那种情况下,我想再次获取发件人的x:name-attribute。 我该怎么做?

对象看起来像这样:

<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="trololo">

2 个答案:

答案 0 :(得分:6)

如果我已正确理解您的问题,您可以通过将发件人转发给Name来访问FrameworkElement媒体资源。

或者,您可以只使用设计器创建的引用对象,实例名称与您在x:Name属性中指定的名称相同。

以下内容演示了这两个选项。

  private void ModelUIElement3D_MouseDown(object sender, MouseButtonEventArgs e)
  {
    var element = sender as FrameworkElement;

    if (element != null)
    {
      if (element.Name == "trololo")
      {
      }
    }

    // Or

    if (sender == trololo)
    {
    }

  }

答案 1 :(得分:0)

基于FrameworkElement的Name属性是标准依赖项属性,用作x:Name的快捷方式(请参阅FrameworkElement.Name Property)。但是,许多依赖项对象不是从FrameworkElement派生的,但它们仍然可以使用XAML附加属性x:Name。要确定x:在XAML中声明的对象的运行时名称不是从FrameworkElement派生的,可以使用GetValue检索对象的附加属性,如下所示:

foreach(var column in gridItem.ColumnDefinitions)
{
    var name = column.GetValue(FrameworkElement.NameProperty) as string;
    if (name == "IsCheckedColumn")
        column.Width = show ? CheckUncheckColumn_VisibleWidth : Column_InvisibleWidth;
    else if (name == "DeleteColumn")
        column.Width = show ? DeleteColumn_VisibleWidth : Column_InvisibleWidth;
}