2010-09-22 93 views
0

我将X:我的XAML文件中的名称分配给可触发MouseDown事件的对象。 在这种情况下,我想再次获取发件人的x:name-attribute。 我该怎么做?如何访问代码中的x:Name-property?

物体看起来像这样:

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

回答

5

如果我理解正确你的问题,你可以通过铸造发送到FrameworkElement访问Name属性。

或者,您可以只使用由设计者创建的引用对象,实例名称与您在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) 
    { 
    } 

    } 
+0

它铸造于FrameworkElement的,然后访问没有按似乎没有工作,但发件人== trololo呢。 谢谢! – Hedge 2010-09-22 20:30:04

+0

@Hedge,转换为FrameWorkElement的原因不起作用,因为ModelUIElement3D继承链不是从FrameworkElement派生的。我必须去检查一下,但我很高兴你有解决方案。 – 2010-09-22 20:57:07

0

基于FrameworkElement的-Name属性是一个标准的依赖属性旨在作为对于x快捷方式:名称(参见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; 
}