上面的DataTrigger假设菜单项绑定到包含属性IsManuallyFocused including change notifications, either using INotifyPropertyChanged or a DependencyProperty '的类(此处不再进一步描述)。 注意:在本例中,属性具有相同的名称,但也可以使用不同的名称;DataTrigger.Binding必须引用源类上的属性,而Setter.Property必须引用新菜单项类MyMenuItem上的属性。
3条答案
按热度按时间ndh0cuux1#
试试这个:
在代码隐藏中:
dgtucam12#
我不确定您要选择哪个控件(Datagrid、ListView或其他)。但是,您需要检查的第一件事是您的控件是否支持
KeyPress
事件。如果支持,则尝试附加KeyPress
的处理程序,并编写逻辑来检查所需的键并相应地选择项。您可以查看示例here,它实现了如何基于Enter键选择数据网格单元格/行。
gupuwyp23#
这里有一个解决方案,将工作的动态上下文菜单。
MenuItem
类。**要实现这一点,我们需要定制类
MyContextMenu
和MyMenuItem
:这两个类都包含两个相同的重写,如here所述。诚然,这有点像黑客,因为它依赖于正确地模仿内部代码。
现在,在创建上下文菜单时,使用新类
MyContextMenu
。第二个类,
MyMenuItem
,有一个额外的DependencyProperty
,我们稍后将在DataTrigger
中使用它。正如您在IsManuallyFocusedChanged
中所看到的,如果IsManuallyFocused
被设置为true
,则会为该项调用Focus()
方法。注意:
MyMenuItem.IsManuallyFocused
的实际值是不会被读取的,我们只是将该属性用作一种绑定机制,允许我们调用一个方法。除了我们在这里添加的额外触发器之外,请确保将样式中的所有
TargetType
规范更改为新的菜单项类型。上面的
DataTrigger
假设菜单项绑定到包含属性IsManuallyFocusedincluding change notifications, either using
INotifyPropertyChangedor a
DependencyProperty '的类(此处不再进一步描述)。注意:在本例中,属性具有相同的名称,但也可以使用不同的名称;
DataTrigger.Binding
必须引用源类上的属性,而Setter.Property
必须引用新菜单项类MyMenuItem
上的属性。假设您可以访问上下文菜单的源项目,选择指定的项目,然后简单地将
IsManuallyFocused
设置为true
。由于
DataTrigger
,此更改将"转发"到新菜单项类的属性,其中更改处理程序(′ ′)将在绑定菜单项上设置焦点。虽然这样做效果不错,但实现一个自定义菜单项和上下文菜单类可能会在以后派上用场,尤其是
IsManuallyFocused
依赖属性的"误用"会使接缝变得复杂。如果有更好的方法,我希望有另一个更好的答案。