McG*_*gle 4 c# silverlight xaml blend-sdk
相关: “在Silverlight中最干净的单击+双击处理?”
使双击触发XAML中的某些操作的最简单方法是什么?
我正在尝试做这样的事情,当用户双击ListBox项时关闭弹出窗口:
<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>
Run Code Online (Sandbox Code Playgroud)
上面的问题当然是没有“ 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,OP中的XAML应该通过将EventTrigger替换为上述内容而起作用DoubleClickTrigger。
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |