XamlBehaviorsWpf WPF 行为不适用于 KeyUp
XamlBehaviorsWpf WPF Behaviors not working on KeyUp
我正在使用 Microsoft XamlBehaviorsWpf [缺少标签!有足够高评级的人可以在我的 WPF 应用程序中添加]。
我的 XAML 中有四个行为触发器,如下所示。
我发现 KeyDown
触发器工作正常,但 KeyUp
事件不是。
有人知道为什么吗?
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
....
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlDown"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="RightCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlDown"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyUp">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlUp"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="RightCtrl" FiredOn="KeyUp">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlUp"/>
</behaviors:KeyTrigger>
....
这是我的 ViewModel
public void CtrlDown()
{
cntrlSelected = true;
MessageBox.Show("down");
}
public void CtrlUp()
{
MessageBox.Show("up");
cntrlSelected = false;
}
编辑
这是可用 FiredOn
选项的屏幕截图:
编辑 2
此问题已在 GitHub 上提出,但现在仍有 8 个月未收到回复,因此不确定这是一个错误,还是我(加上其他人)没有正确使用该库。
Link: Issue #77
I'm finding that the KeyDown triggers are working fine but the KeyUp events are not
我可以自己复制这种行为,老实说,我不确定为什么 FiredOn
=> KeyUp
不起作用(我需要进行更多调查)。我还要感谢您为 GitHub 上提出的问题提供 link,目前似乎还没有人被分配到这个问题。
我已经通过将 TriggerType
更改为 EventTrigger
来解决这个问题,请看下面:
.xaml 变化
<behaviors:EventTrigger EventName="KeyUp">
<behaviors:CallMethodAction MethodName="CtrlUp" TargetObject="{Binding}" />
</behaviors:EventTrigger>
有了这个改变,我们现在需要改变支持 viewmodel/code CtrlUp
方法签名。另外值得一提的是 CallMethodAction
确实接受参数,在这种情况下我们确实需要。请参阅下面的更改:
public void CtrlUp(object sender, KeyEventArgs e)
{
if(e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
Console.WriteLine("UP");
}
}
我知道这是解决实际问题的方法,但它确实有效。希望团队能够调查问题的根本原因并解决问题。
使用所有代码
MainWindow.xaml
<Window x:Name="myUserControl"
x:Class="WpfApp14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp14"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d"
>
<behaviors:Interaction.Triggers>
<behaviors:EventTrigger EventName="KeyUp">
<behaviors:CallMethodAction MethodName="CtrlUp" TargetObject="{Binding}" />
</behaviors:EventTrigger>
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction MethodName="CtrlDown" TargetObject="{Binding}" />
</behaviors:KeyTrigger>
</behaviors:Interaction.Triggers>
<Grid x:Name="grid" />
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public void CtrlUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
Console.WriteLine("UP");
}
}
public void CtrlDown() => Console.WriteLine("DOWN");
}
我也在使用版本:1.1.31
of Microsoft.Xaml.Behaviors.Wpf
我正在使用 Microsoft XamlBehaviorsWpf [缺少标签!有足够高评级的人可以在我的 WPF 应用程序中添加]。 我的 XAML 中有四个行为触发器,如下所示。
我发现 KeyDown
触发器工作正常,但 KeyUp
事件不是。
有人知道为什么吗?
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
....
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlDown"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="RightCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlDown"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyUp">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlUp"/>
</behaviors:KeyTrigger>
<behaviors:KeyTrigger Key="RightCtrl" FiredOn="KeyUp">
<behaviors:CallMethodAction TargetObject="{Binding}" MethodName="CtrlUp"/>
</behaviors:KeyTrigger>
....
这是我的 ViewModel
public void CtrlDown()
{
cntrlSelected = true;
MessageBox.Show("down");
}
public void CtrlUp()
{
MessageBox.Show("up");
cntrlSelected = false;
}
编辑
这是可用 FiredOn
选项的屏幕截图:
编辑 2
此问题已在 GitHub 上提出,但现在仍有 8 个月未收到回复,因此不确定这是一个错误,还是我(加上其他人)没有正确使用该库。
Link: Issue #77
I'm finding that the KeyDown triggers are working fine but the KeyUp events are not
我可以自己复制这种行为,老实说,我不确定为什么 FiredOn
=> KeyUp
不起作用(我需要进行更多调查)。我还要感谢您为 GitHub 上提出的问题提供 link,目前似乎还没有人被分配到这个问题。
我已经通过将 TriggerType
更改为 EventTrigger
来解决这个问题,请看下面:
.xaml 变化
<behaviors:EventTrigger EventName="KeyUp">
<behaviors:CallMethodAction MethodName="CtrlUp" TargetObject="{Binding}" />
</behaviors:EventTrigger>
有了这个改变,我们现在需要改变支持 viewmodel/code CtrlUp
方法签名。另外值得一提的是 CallMethodAction
确实接受参数,在这种情况下我们确实需要。请参阅下面的更改:
public void CtrlUp(object sender, KeyEventArgs e)
{
if(e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
Console.WriteLine("UP");
}
}
我知道这是解决实际问题的方法,但它确实有效。希望团队能够调查问题的根本原因并解决问题。
使用所有代码
MainWindow.xaml
<Window x:Name="myUserControl"
x:Class="WpfApp14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp14"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d"
>
<behaviors:Interaction.Triggers>
<behaviors:EventTrigger EventName="KeyUp">
<behaviors:CallMethodAction MethodName="CtrlUp" TargetObject="{Binding}" />
</behaviors:EventTrigger>
<behaviors:KeyTrigger Key="LeftCtrl" FiredOn="KeyDown">
<behaviors:CallMethodAction MethodName="CtrlDown" TargetObject="{Binding}" />
</behaviors:KeyTrigger>
</behaviors:Interaction.Triggers>
<Grid x:Name="grid" />
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public void CtrlUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
Console.WriteLine("UP");
}
}
public void CtrlDown() => Console.WriteLine("DOWN");
}
我也在使用版本:1.1.31
of Microsoft.Xaml.Behaviors.Wpf