微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#-Silverlight的双击触发器

相关:“Cleanest single click + double click handling in 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>

上面的问题当然是没有“ 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来工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐