确定继承属性的基类

问题描述

为了使用模式匹配清理我的代码,我需要找到某个公共属性继承自的公共基类。

在下面的例子中,sender一个 wpf DataTemplate,由一个 Grid 和几个 UIElement 组成。我想使用数据模板的源启动一个拖动事件,一个可以从任何对象的 Vehicle 属性访问的 DataContext

为了编写干净的代码,我需要找到我的 UIElements 继承 DataContext 属性的公共基类:

private void Grid_MouseDown(object sender,MouseButtonEventArgs e)
{
   if (e.LeftButton == MouseButtonState.pressed)
   {
      if (e.source is CommonBaseClassFromWhichDataContextPropertyIsInherited obj)
      {
         var vehicle = obj.DataContext;
         DataObject data = new DataObject();
         data.SetData(typeof(Vehicle),vehicle);
         DragDrop.DoDragDrop(this,data,DragDropEffects.Move);
      }
   }
}

@thatguy 回答我的例子:FrameWorkElement 是我正在寻找的类。

但我的问题更多是关于确定基类的方法:你浏览元数据吗?是否有智能感知功能

解决方法

FrameworkElement 类型定义了 DataContext 属性,因此您可以匹配它。

if (e.Source is FrameworkElement frameworkElement)
{
   var vehicle = frameworkElement.DataContext;
   // ...
}

确定基类的方法:

  • 使用 IntelliSense 浏览元数据,例如在 XAML 或 C# 代码中单击 DataContext 并按 F12 或右键单击并选择转到定义
  • Google wpf [Name of the property] property,寻找 docs.microsoft.com/... 链接。
  • 记住一次被遗忘已久的培训,在那里被提及,或者在无数博客或其他网站中搜索了完全不同的内容并无意中学到了它。
  • Ask a question on StackOverflow,得到一个 answer(警告,递归)。
  • 遇见已经通过时间旅行了解它的未来的自己,但要小心不要打破时空连续体,去过那里,做过那件事,很难修复,更难解释。
  • 加入黑暗面,使用无限力量,或者成为绝地冥想。