WPF .NET4.8中ContextMenu.SourceControl属性不存在问题求助
错误原因
WPF的ContextMenu类不存在SourceControl属性,你误用了非官方属性导致编译错误。正确获取上下文菜单关联控件的属性是PlacementTarget。
修改后的代码
void showInExplorerFolder_Click(object sender, RoutedEventArgs e) { Console.WriteLine("event triggered"); MenuItem menuItem = (MenuItem)sender; ContextMenu parent = (ContextMenu)menuItem.Parent; // 利用PlacementTarget获取关联的TreeViewItem,同时做类型安全检查 if (parent.PlacementTarget is TreeViewItem targetItem) { Console.WriteLine("成功获取父级TreeViewItem: " + targetItem.Header); // 在这里添加你的业务逻辑,比如打开资源管理器等操作 } else { Console.WriteLine("无法找到关联的TreeViewItem"); } }
补充说明
PlacementTarget是WPF ContextMenu的标准属性,用于返回菜单所附着的控件实例。- 使用
is关键字做类型检查可以避免强制转换时的InvalidCastException,同时直接获取目标变量。 - 如果你的ContextMenu是绑定在TreeViewItem的子元素上(而非直接绑定在TreeViewItem),可以通过
VisualTreeHelper向上遍历可视化树找到对应的TreeViewItem,示例代码如下:
private TreeViewItem FindTreeViewItem(DependencyObject obj) { while (obj != null && !(obj is TreeViewItem)) { obj = VisualTreeHelper.GetParent(obj); } return obj as TreeViewItem; }
调用时替换为:
var targetItem = FindTreeViewItem(parent.PlacementTarget);
内容的提问来源于stack exchange,提问作者umurew
相关产品推荐
相关产品推荐

