我正在尝试处理列表框项目上的单击和双击事件。我用MouseDoubleClick
(听双击)和PreviewMouseLeftButtonDown
(听单击)。现在,当我运行应用程序时,双击事件不会触发,因为每次MouseDoubleClick
都会触发。这是我的xaml代码,我想知道我应该用什么事件来处理两者,感谢任何帮助。谢谢。
修改:我的代码无法触发双击,因为它会触发单击事件2次。
<ListBox Grid.Column="1" ItemsSource="{Binding Items}" Name="detailList"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
MouseDoubleClick="detailList_MouseDoubleClick"
PreviewMouseLeftButtonDown="DetailList_OnPreviewMouseLeftButtonDown"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate >
<DataTemplate>
<StackPanel Orientation="Vertical" Width="90" >
<Image Width="80" Source="{Binding Image}"/>
<TextBlock Width="60" Height="30" TextWrapping="Wrap" FontSize="11" Text="{Binding Name}" TextAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:2)
双击的第二次点击是按照定义始终,然后单击一下。
您可以使用计时器等待200毫秒来查看第一个点击后是否还有其他点击。
public partial class MainWindow : Window
{
System.Windows.Threading.DispatcherTimer _timer = new System.Windows.Threading.DispatcherTimer();
public MainWindow()
{
InitializeComponent();
_timer.Interval = TimeSpan.FromSeconds(0.2); //wait for the other click for 200ms
_timer.Tick += _timer_Tick;
}
private void lv_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if(e.ClickCount == 2)
{
_timer.Stop();
System.Diagnostics.Debug.WriteLine("double click"); //handle the double click event here...
}
else
{
_timer.Start();
}
}
private void _timer_Tick(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("click"); //handle the Click event here...
_timer.Stop();
}
}
<ListBox PreviewMouseLeftButtonDown="lv_PreviewMouseLeftButtonDown" ... />
答案 1 :(得分:1)
我无法找到一个好的解决方案,但您可以在一段时间内计算PreviewMouseLeftButtonDown
来解决问题。
If the mouse was clicked only one time in 0.3 sec, do ...
If the mouse was clicket two times in 0.3 sec, do ...