不能隐式转换父控件名称的类型

本文关键字:类型 控件 转换 不能 | 更新日期: 2023-09-27 18:09:47

我编写了一个代码,用于获取ContexMenu的父名称,特别是当用户单击ContextMenuMenuItem时发生以下情况:

DataGrid -> ContextMenu (MenuItem 1 was clicked) -> function through code is started -> function return the name of the DataGrid.
private void ClearTable_Click(object sender, RoutedEventArgs e)
{
     // Try to cast the sender to a Control
     Control ctrl = sender as Control;
     if (ctrl != null)
     {
          // Get the control name
          string name = ctrl.Name;
          // Get parent control name
          Control parent = ctrl.Parent;
          string parentName = parent.Name;
     }
}

但在ctrl.Parent我得到这个错误:

不能隐式转换"System.Windows.Controls.Control"中的类型"System.Windows.DependencyObject"。存在显式转换,您是否缺少强制转换?

我做错了什么?

不能隐式转换父控件名称的类型

你错过了一个强制转换,事实上它不需要强制转换到Control,使用基类FrameworkElement代替:

 FrameworkElement parent = (FrameworkElement)ctrl.Parent;
 string parentName = parent.Name;