我将X:我的XAML文件中的名称分配给可触发MouseDown事件的对象。 在这种情况下,我想再次获取发件人的x:name-attribute。 我该怎么做?如何访问代码中的x:Name-property?
物体看起来像这样:
<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="trololo">
我将X:我的XAML文件中的名称分配给可触发MouseDown事件的对象。 在这种情况下,我想再次获取发件人的x:name-attribute。 我该怎么做?如何访问代码中的x:Name-property?
物体看起来像这样:
<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="trololo">
如果我理解正确你的问题,你可以通过铸造发送到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)
{
}
}
基于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;
}
它铸造于FrameworkElement的,然后访问没有按似乎没有工作,但发件人== trololo呢。 谢谢! – Hedge 2010-09-22 20:30:04
@Hedge,转换为FrameWorkElement的原因不起作用,因为ModelUIElement3D继承链不是从FrameworkElement派生的。我必须去检查一下,但我很高兴你有解决方案。 – 2010-09-22 20:57:07