我有一个在Grid中包含Image的按钮,我的问题是无法使按钮的Click
事件起作用。
我的XAML代码:
....
<TabControl TabStripPlacement="Left">
<TabItem Loaded="ListProductsLoaded" Width="185" Height="100" Header="Lister les Produits">
<Grid Background="#FFE5E5E5">
<ListView Name="ProductsListView" IsHitTestVisible="False">
<ListView.View>
<GridView>
<GridViewColumn Width="120" Header="Reference" DisplayMemberBinding="{Binding ProductReference}"></GridViewColumn>
<GridViewColumn Width="150" Header="Nom" DisplayMemberBinding="{Binding ProductName}"></GridViewColumn>
<GridViewColumn Width="120" Header="Photo" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button PreviewMouseLeftButtonDown="ImageButtonLeftMouseButtonDown" Name="ImageButton" Width="120" Height="120" Click="ImageButtonClicked">
<Image Width="119" Height="119" Name="ProdImage" Source="{Binding ProductImage}"></Image>
</Button>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</TabItem>
</TabControl>
....
您可以看到,我使用了两个事件,PreviewMouseLeftButtonDown
事件和Click事件,我使用PreviewMouseLeftButtonDown
事件是因为我在stackoverflow问题中看到了一个解决方案,但它没有起作用。这两个事件方法都显示了一个MessageBox
private void ImageButtonClicked(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "clicked image button");
}
private void ImageButtonLeftMouseButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("test clicked");
}
如果有人之前遇到过这个问题,请帮助我解决它,我搜索了很多但没有成功的解决方案。提前感谢。
编辑:即使我使用普通按钮:没有图像,它也不起作用。
解决方案:实际上,我将
TabControl
的IsHitTestVisible
选项设置为false
,这禁用了所有的Click
事件...对不起大家。
Button_Click
事件没有触发,因为我同时还有一个包含e.Handled=true
的Button_PreviewMouseUp
事件。当我把它移除后,Click 事件就正常工作了。 - MHN