首页 > 解决方案 > 标识继承属性的基类

问题描述

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

在以下示例中, thesender是一个 wpf DataTemplate,由 aGrid和几个组成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 是我正在寻找的类。

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

标签: c#wpfinheritancepattern-matching

解决方案


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

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

确定基类的方法:

  • 使用 IntelliSense 浏览元数据,例如DataContext在 XAML 或 C# 代码中单击并点击F12或右键单击并选择Go to definition
  • 谷歌wpf [Name of the property] property,寻找 docs.microsoft.com/...链接。
  • 记住一个被遗忘已久的培训,或者在无数博客或其他网站中,您搜索了完全不同的东西并偶然学到了它。
  • 在 StackOverflow 上提问,得到答案(警告,递归)。
  • 通过时间旅行认识你未来的自己,但要小心不要打破时空连续体,去过那里,做过那个,很难修复,更难解释。
  • 加入黑暗面并使用无限的力量,或者成为绝地并冥想。

推荐阅读