我正在尝试使用交互功能来实现鼠标双击标准图像控件。 Image 控件在 UserControl 上,应该处理鼠标双击的方法在 View 模型上。代码如下:
1)用户控制:
<ItemsControl Grid.Row="0" ItemsSource="{Binding SelectedEventPhotoList}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Name="SelectedListView">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="3"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" Stretch="None">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<ei:CallMethodAction MethodName="DblClick" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
3)查看模型:
public void DblClick()
{
MessageBox.Show("Double click!");
}
但是,它不起作用。
更新:
我这样做了,但它不起作用:
1)XAML:
<ItemsControl Grid.Row="0" ItemsSource="{Binding SelectedEventPhotoList}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Name="SelectedListView">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="3"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}">
<Image.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding MouseDoubleClickCommand}"/>
</Image.InputBindings>
</Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
2)查看模型:
public DelegateCommand MouseDoubleClickCommand { get; private set; }
在构造函数中:
MouseDoubleClickCommand = new DelegateCommand(DblClick);
并添加方法:
public void DblClick()
{
MessageBox.Show("Double click!");
}
最佳答案
有时处理 OnMouseDownClickCount
很有用(或 MouseLeftButtonDown
)事件处理程序并检查 ClickCount
MouseButtonEventArgs
的属性(property)争论。这种方法允许处理单击、双击、三次单击等 :)
private void OnMouseDownClickCount(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
// Double Click occurred.
...
}
}
但是这种方法有一个“特点”。双击 OnMouseDownClickCount
时事件上升两次:第一次是 e.ClickCount == 1
然后用 e.ClickCount == 2
.
关于WPF:鼠标双击图像使用交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42396396/