【发布时间】:2010-09-22 19:51:01
【问题描述】:
我将 XAML 文件中的 x:Name 分配给了一个可以触发 MouseDown 事件的对象。 在那种情况下,我想再次获得发件人的 x:name-attribute。 我该怎么做?
对象看起来像这样:
<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="trololo">
【问题讨论】:
我将 XAML 文件中的 x:Name 分配给了一个可以触发 MouseDown 事件的对象。 在那种情况下,我想再次获得发件人的 x:name-attribute。 我该怎么做?
对象看起来像这样:
<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:Name 的快捷方式(请参阅FrameworkElement.Name Property)。但是,许多依赖对象不是从 FrameworkElement 派生的,但它们仍然可以使用 XAML 附加的属性 x:Name。要在运行时确定在 XAML 中声明的不是从 FrameworkElement 派生的对象的 x:Name,您可以使用 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;
}
【讨论】: