![]() |
1
55
问题是ContextMenu不在可视化树中,所以您基本上必须告诉ContextMenu要使用哪个数据上下文。 他创建了一个继承Freezable并声明数据依赖属性的类代理。
并在可视化树外的上下文菜单中使用:
|
![]() |
2
17
万岁 web.archive.org ! 这里是 the missing blog post
|
![]() |
3
10
我发现它不适合我,因为菜单项是嵌套的,这意味着我必须遍历一个额外的“父”来找到PlacementTarget。 更好的方法是找到ContextMenu本身作为RelativeSource,然后绑定到它的放置目标。另外,由于标记是窗口本身,并且命令位于viewmodel中,因此还需要设置DataContext。
这意味着,如果你最终得到一个复杂的上下文菜单与子菜单等。。您不需要一直在每个级别的命令中添加“Parent”。 --编辑-- 还提出了另一种方法,在绑定到Window/Usercontrol的每个ListBoxItem上设置一个标记。我之所以这样做是因为每个ListBoxItem都由它们自己的ViewModel表示,但是我需要通过控件的顶级ViewModel执行菜单命令,但是将它们作为参数传递给list ViewModel。
|
![]() |
4
6
HCLs answer ,这是我最终使用的:
|
![]() |
5
6
|
![]() |
6
2
如果(像我一样)您不喜欢难看的复杂绑定表达式,这里有一个简单的代码隐藏解决方案。这种方法仍然允许您在XAML中保持干净的命令声明。 XAML编号:
代码隐藏:
|
![]() |
7
1
2020年答案: 我把这个答案留给其他在google上搜索过这个问题的人,因为这是第一个出现的搜索结果。 这对我很有效,而且比其他建议的解决方案更简单:
如下所述: |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |