题
N.B这个问题已经更新,进一步阅读下
嗨,
我想要创造一个定制的上下文的菜单,有4个子的菜单,各自在自己的象限(左,右上,左,右).类似的3d工作室最大。
这是我们走近一问题迄今为止:-创建一个定义WPF控制,来自右键菜单和处理流程[1]
-宣布4依赖性的右键菜单和处理流程,这些将显示的菜单,并可以从停靠。
-AddOwner到右键菜单和处理流程的.IsOpenProperty,增加的一个属性变更通知。
-当打财产变化设置的打酒店的4子上下文的菜单。
-使用ContextMenuService设置的垂直和水平偏移的上下文的菜单,使他们出现在每个象限;结合实际的高度和宽度的性能计算出抵消。
[1]需要得从上下文的菜单,否则不能将它分配给右键菜单和处理流程的酒店的窗口。
此 出现 工作有问题的菜单 不 保持开放(它们被封闭,因为重点是菜单外的)但是我敢肯定使用Reflector.NET 找到一个方法解决这个问题。
这是我的第一个定义WPF控制,我已经尝试写;并不知道如果这是最好的办法。
任何建议/意见对如何创建这四的上下文的菜单吗?
解决方案 2
更新
"确定"。后玩弄定控制我的东西 工作 比以前更好。所有的菜单现在开放。
我做了什么:
-创建的定的控制命名为QuadContextMenu来自右键菜单和处理流程,复盖默认风格的关键。
-风格的控制有4个弹出原语:
-每PART_的名字所以我获得一提到他们当OnApplyTemplate.
-每个人都有儿童QuadMenu,这是定制的控制产生的MenuBase.
-每个人都有自己的VerticleOffset和HorizontalOffset性结合到ActualHeight和ActualWidth的孩子[2].
QuadMenu式/控制模板:
-有一个经典的边界的一个dockpanel和边境有一个文本块把菜单的名字。
[2]的位置如何菜单到四:-左上是偏负实际的宽度和高度
-TopRight偏负实际的高度
-BottomLeft偏负实际的高度
-先是 不 偏移和在原来的位置
新的问题/问题
这些都是下一个挑战,要使这种控制:
1.在目前的键盘和鼠标是锁定的/所捕获的第一个菜单,你焦点上和其他人不提供通盘旋在他们。这意味着你只能使用1的菜单。
2.触的菜单项使用的左上/BottomLeft的子打开左侧。
我已经试图更换菜单项通过重GetContainerForItemOverride方法返回QuadMenuItem.QuadMenuItem是一个自定义的控制从菜单项.当我这么做但是我失去的子菜单的功能,这是令人沮丧。
如果任何人有任何尖/技巧/建议,关于如何解决这些问题,它会非常感谢!D谢谢
其他提示
我能想到的两种方法,没有一个是一定是干净的,但有,如果你有时间去工作的可能性。
方法1
使用上下文菜单,而是通过设置模板让这个通过ContextMenu真的只是表明,发生在打开其他窗口控制。也许技巧可以做到,这样打开这些二级菜单不走的焦点了。这可能最终导致仍然原来的问题。
方法2
如果您设置ContextMenu.StaysOpen为false,然后尝试在菜单关闭自己来控制,会发生什么?