I am using the Blend SDK KeyTrigger in a WPF project and have a problem that the event is fired several times every time I click on the assigned key, here is DeleteCommand.
<ei:KeyTrigger FiredOn="KeyDown" ActiveOnFocus="True" SourceName="repositoryPackages" Key="Delete">
<i:InvokeCommandAction Command="{Binding SelectedItem.DeleteCommand, repositoryPackages}" />
</ei:KeyTrigger>
This trigger is in the ListView trigger collection, which itself is in the grid inside the user control.
The user control is then embedded in the WPF TabControl tab in the main application window.
Each time I switch and return to the tab using the ListView, the trigger invokes the command again ad infinitum.
I looked at the source of KeyTrigger (at Microsoft.Expressions.Interactions) and noticed the following lines:
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);
}
}
OnEvent , OnLoaded. TabControl OnLoaded , . , KeyDown/KeyUp.
Blend SDK KeyTrigger.
- , , KeyTrigger?