c# - 标识继承属性的基类
问题描述
为了通过使用模式匹配来清理我的代码,我需要找到继承某个公共属性的公共基类。
在以下示例中, 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 是我正在寻找的类。
但我的问题更多是关于确定基类的方法:您是否浏览元数据?有智能感知功能吗?
解决方案
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 上提问,得到答案(警告,递归)。
- 通过时间旅行认识你未来的自己,但要小心不要打破时空连续体,去过那里,做过那个,很难修复,更难解释。
- 加入黑暗面并使用无限的力量,或者成为绝地并冥想。
推荐阅读
- laravel - laravel-mongodb ORDER BY FIELD 不工作
- html - 如果 DIV 在可滚动的父 DIV 中,如何将其宽度设置为 100%?
- python - '' Unsupported TensorFlow op: IteratorV2" 当我尝试使用 pb 模型获取 tflite 文件时
- angular - 无法使用 ng-repeat 获取下拉列表中的数据
- github - Github 操作:即使上一步失败,也有条件地运行步骤
- c# - 将文本分配给变量 webdriver
- python - 如果它们匹配,则将数据框中的单词更改为来自不同数据框中的不同单词
- java - 如何将 Java 枚举与 Amazon DynamoDB 和 AWS SDK v2 结合使用?
- flutter - 无法加载文件列表的内容:'/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug-input-files.xcfilelist'。Flutter M1 芯片
- opencv - EMD(推土机距离)HSV vs BGR