我有几个按钮作为数量的+/-步进控件。 Windows的默认行为是,如果它被认为是双击并且不会触发第二个分接事件,则吸收点击:
如果用户互动也会触发DoubleTapped,则Tapped将首先触发以表示第一次点击,但第二次点按则不会触发其他Tapped。
但是这为步进按钮提供了非常糟糕的用户体验。用户应该能够尽可能快地点击它,它应该每次都增加计数器,而不是像目前那样每隔一次增加。
奇怪的是我无法在任何地方找到如何做到这一点。起初我以为我拥有O(n)
属性,但遗憾的是这一切都让人失望。无论是打开还是关闭,完全相同的行为。
答案 0 :(得分:2)
有一种更简单的方法 - 使用内置 decodeAudioData
代替。它甚至可以自动处理按下状态,因此您可以按住它以持续更改值。
答案 1 :(得分:1)
实现这一目标的一种方法是在双击处理程序中调用单击事件。只有在您不希望通过该事件传递arguments
时才能执行此操作。
但即使目前不需要数据也总是很好,你永远不会知道你想要缩放的内容和时间,这样你就可以创建一个简单的{{1我喜欢称它为有助于在两个事件之间传输数据,然后调用一个方法。以下代码完全相同:
在背后的代码中:
BridgeClass
支持班级
和int counter = 0;
private void Button_Tapped(object sender, TappedRoutedEventArgs e)
{
MyTappedClass SingleTapInstance = new MyTappedClass()
{
Handled = e.Handled,
OriginalSource = e.OriginalSource,
PointerDeviceType = e.PointerDeviceType
};
HandleBothTapEvents(SingleTapInstance);
}
private void Button_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
MyTappedClass DoubleTapInstance = new MyTappedClass()
{
Handled = e.Handled,
OriginalSource = e.OriginalSource,
PointerDeviceType = e.PointerDeviceType
};
HandleBothTapEvents(DoubleTapInstance);
}
private void HandleBothTapEvents(MyTappedClass TapData)
{
if (TapData != null)
{
counter++;
Hello.Content = counter.ToString();
}
else
throw new Exception("No Tap event data transfered");
}
你想要的地方。我的建议是把它放在Helpers文件夹中(如果你有的话)。
BridgeClass
注意:这只是一个快速的解决方法,我的工作非常好我不知道是否有传统方法来实现这一目标但是没有一个编程中的正确答案,所以我猜你可以使用它。通过使用public class MyTappedClass
{
public object OriginalSource { get; set; }
public PointerDeviceType PointerDeviceType { get; set; }
public bool Handled { get; set; }
}
在两个事件之间传输数据而不是Interfaces
,可以使功能更加通用,因为接口的设计也是如此。
答案 2 :(得分:0)
IsDoubleTapEnabled
属性应该按照您的意愿执行,但是如果您在控件上设置了DoubleTap事件的事件处理程序,很多人经常会错过这个自动设置为true的事实。如果您有一组,则删除事件处理程序,并且您应该能够快速连续获取所有点击事件。