- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 WPF 项目中使用 Blend SDK KeyTrigger,并且遇到这样的问题:每次按下指定的键(此处为 DeleteCommand)时,都会多次触发该事件。
<ei:KeyTrigger FiredOn="KeyDown" ActiveOnFocus="True" SourceName="repositoryPackages" Key="Delete">
<i:InvokeCommandAction Command="{Binding SelectedItem.DeleteCommand, repositoryPackages}" />
</ei:KeyTrigger>
此触发器位于 ListView 的触发器集合中,ListView 本身位于用户控件内的网格上。
然后将用户控件嵌入到应用程序主窗口上的 WPF TabControl 的选项卡上。
每次我用 ListView 切换回选项卡时,触发器都会无限次调用该命令。
我查看了 KeyTrigger 的源代码(在 Microsoft.Expressions.Interactions 中)并注意到以下几行:
protected override void OnEvent(EventArgs eventArgs)
{
if (this.ActiveOnFocus)
{
this.targetElement = base.Source;
}
else
{
this.targetElement = GetRoot(base.Source);
}
if (this.FiredOn == KeyTriggerFiredOn.KeyDown)
{
this.targetElement.KeyDown += new KeyEventHandler(this.OnKeyPress);
}
else
{
this.targetElement.KeyUp += new KeyEventHandler(this.OnKeyPress);
}
}
每当触发器的关联元素获得 OnLoaded 事件时,OnEvent 方法就会被调用一次。但每次激活选项卡时,TabControl 上的元素都会获得 OnLoaded 事件。这意味着您每次都向 KeyDown/KeyUp 添加相同的事件处理程序。
对我来说,这看起来确实是 Blend SDK KeyTrigger 实现中的一个重大疏忽。
有人知道如何防止这种情况发生或者如何实现正确的 KeyTrigger 吗?
最佳答案
您是否尝试过使用 FiredOn="KeyUp"
来代替? KeyDown 也可以由操作系统重复,我想您无论如何也不希望重复删除?
关于wpf - Blend KeyTrigger 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948158/
我在 WPF 项目中使用 Blend SDK KeyTrigger,并且遇到这样的问题:每次按下指定的键(此处为 DeleteCommand)时,都会多次触发该事件。 此触发器位于 List
我是一名优秀的程序员,十分优秀!