我正在尝试使用交互功能来实现鼠标双击标准图像控件。 Image控件在UserControl上,应该处理鼠标双击的方法是在视图模型上。代码如下:
1)UserControl:
<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!");
}
答案 0 :(得分:3)
Image类没有MouseDoubleClick
个事件,但您可以使用绑定到InputBinding
属性的ICommand
:
<Image Source="pic.png">
<Image.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding MouseDoubleClickCommand}"/>
</Image.InputBindings>
</Image>
public ICommand MouseDoubleClickCommand { get; } = new DelegateCommand<object>(obj => { MessageBox.Show(""); });
您需要提供ICommand
界面的实现或使用其他人的界面。 Prism中提供DelegateCommand<T>
课程:https://www.nuget.org/packages/Prism.Wpf/
有关命令以及如何使用MVVM设计模式处理事件的更多信息,请参阅以下博文:https://blog.magnusmontin.net/2013/06/30/handling-events-in-an-mvvm-wpf-application/
修改强>
如果在视图模型中定义了命令,即DataContext
本身的ItemsControl
,则应使用RelativeSource
来绑定它:
<DataTemplate>
<Image Source="{Binding}">
<Image.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding DataContext.MouseDoubleClickCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"/>
</Image.InputBindings>
</Image>
</DataTemplate>
答案 1 :(得分:2)
有时,处理OnMouseDownClickCount
(或MouseLeftButtonDown
)事件处理程序并检查ClickCount
参数的MouseButtonEventArgs
属性很有用。这种方法可以处理单击,双击,三次单击等:)
private void OnMouseDownClickCount(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
// Double Click occurred.
...
}
}
但是这种方法有一个“功能”。双击OnMouseDownClickCount
时,事件会发生两次:第一次与e.ClickCount == 1
,然后与e.ClickCount == 2
。