当我向ListViewItem
添加一个事件时,
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseDown" Handler="listViewItem_MouseDown" />
</Style>
然后在GridViewColumn
,
<GridViewColumn Header="Action">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image x:Name="imgEdit"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Width="40"
Height="40"
Tag="{Binding ProductBarcode}"
Cursor="Hand"
MouseDown="img_MouseDown">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/Resources/edit_button.png" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/Resources/edit_button_hovered.png" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我无法在Image
控件中触发事件。正在开火的是ListViewItem
中的事件。如何在Image
控件中访问该事件?
以下是事件:
private void img_MouseDown(object sender, MouseButtonEventArgs e)
{
switch ((sender as Image).Name)
{
case "imgEdit":
MessageBox.Show("EDIT");
break;
default:
break;
}
}
private void listViewItem_MouseDown(object sender, RoutedEventArgs e)
{
MessageBox.Show("ROW CLICKED");
}
答案 0 :(得分:1)
PreviewMouseDown
的{{1}}事件将始终在图片的ListViewItem
事件之前引发。这是路由事件的工作方式:https://msdn.microsoft.com/en-us/library/ms742806(v=vs.110).aspx。 MouseDown
是一个隧道事件,PreviewMouseDown
是一个冒泡事件。
如果您在单击MouseDown
时不想处理PreviewMouseDown
事件,则可以检查Image
的{{1}}的类型并立即返回事件处理程序,如果它是OriginalSource
:
RoutedEventArgs
答案 1 :(得分:-2)
尝试:
if !UserDefaults.standard.bool(forKey: "wasOpenedBefore") {
//the app is opened for the first time - do what you need
UserDefaults.standard.set(true, forKey: "wasOpenedBefore")
}