Related: “Silverlight 中最简洁的单击 + 双击处理?” https://stackoverflow.com/q/1274378/1001985/
在 XAML 中双击触发某些操作的最简单方法是什么?
我正在尝试做这样的事情,当用户双击列表框项目时关闭弹出窗口:
<Popup x:Name="popup">
<ListBox ItemsSource="{Binding Colors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Color="{Binding Color}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DoubleClick">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=popup}"
PropertyName="IsOpen" Value="False" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
</Popup>
上面的问题是,当然,没有“DoubleClick”事件。所以我需要更换EventTrigger
使用双击触发器。
通过继承创建自定义双击触发器TriggerBase<T>
并将侦听器附加到“MouseLeftButtonDown”事件。检查“MouseButtonEventArgs.ClickCount”属性以检查双击:
public class DoubleClickTrigger : TriggerBase<FrameworkElement>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.AddHandler(FrameworkElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(OnClick), true);
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.RemoveHandler(FrameworkElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(OnClick));
}
private void OnClick(object sender, MouseButtonEventArgs args)
{
if (args.ClickCount == 1)
return;
if (args.ClickCount == 2)
InvokeActions(null);
}
}
这样,OP 中的 XAML 就应该通过用上面的代码替换 EventTrigger 来工作DoubleClickTrigger
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)