【问题标题】:Double Click trigger for SilverlightSilverlight 的双击触发器
【发布时间】:2014-05-24 16:20:50
【问题描述】:

相关: "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

【问题讨论】:

    标签: c# silverlight xaml blend-sdk


    【解决方案1】:

    通过继承TriggerBase&lt;T&gt; 并将侦听器附加到“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 来工作。

    【讨论】:

    • +1 我很喜欢这个人,谢谢,还可以指出直到 SL5 才引入 ClickCount 的任何内容
    • @ChrisW。谢谢,我应该提到这一点。在我上面链接的问题中,人们不得不对检查双击的时间间隔进行计时,但 SL5 使用 ClickCount 更容易。此外,WP8 似乎支持 ClickCount(但可能不支持 WP7)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2011-10-30
    • 2012-01-25
    • 2018-03-31
    • 2016-12-12
    • 2012-09-28
    • 1970-01-01
    相关资源
    最近更新 更多