WPF按钮单击事件不工作
本文关键字:工作 事件 单击 按钮 WPF | 更新日期: 2023-09-27 18:16:08
我有一个按钮,其中包含一个网格内的图像,我的问题是,我不能使按钮Click
事件工作。
My XAML code:
....
<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
事件和点击事件,我使用了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
事件…对不起大家。
可以从XAML中删除所有事件订阅,并使用紧凑的语法(只有一行代码)将其放在后面的代码中,如下所示:
ImageButton.Click += (s, e) => { MessageBox.Show("test button clicked"); };
同时,REMOVE你的事件处理进程:
private void ImageButtonClicked(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "clicked image button");
}
除此之外,同一按钮的另一个事件处理程序(XAML中的PreviewMouseLeftButtonDown="ImageButtonLeftMouseButtonDown"
)似乎是多余的-您可以使用相应的事件处理过程删除它。
MainWindow()
{
InitializeComponent();
ImageButton.Click += (s, e) => { MessageBox.Show("test button clicked"); };
// ... the rest of the code...
与您的情况相关(ListView
模板中的Button
控件),请参阅这篇文章:
您的Click事件在codebehind中命名为Test_OnClick
,但在XAML中您将其称为Click="ImageButtonClicked"
,因此事件不会触发。必须是Click="Test_OnClick"
尝试使用点击事件而不使用点击事件。两个事件中的函数相同,
按钮的Click事件正在工作。删除代码中可能在单击和按钮的OnClick()方法之间触发的断点。(如OnPreviewMouseDown等)我不知道Click或MouseDoubleClick事件内部是如何触发/区分的,但逻辑上应该是涉及分析鼠标上下间隔时间的时钟。如果在按下按钮后,代码中有一个断点,则计时器分析无法识别Click事件。