【问题标题】:WPF Button Click Event not workingWPF按钮单击事件不起作用
【发布时间】:2014-09-26 10:00:22
【问题描述】:

我有一个在网格内包含图像的按钮,我的问题是我无法使按钮 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-Event 没有触发,因为我还有一个包含e.Handled=trueButton_PreviewMouseUp-Event。在我删除它之后,Click-Event 起作用了。

标签: c# wpf xaml


【解决方案1】:

您的 Click 事件在代码隐藏中命名为 Test_OnClick,但在 XAML 中您将其称为 Click="ImageButtonClicked",因此该事件不会触发。必须是Click="Test_OnClick"

【讨论】:

  • 不,这不是我必须更改的确切 xaml。但是 ImageButtonClicked 方法像 Test_OnClick 一样存在。
  • Alex有一个很好的解决方案,或者看这个stackoverflow.com/questions/4151380/…
  • 在后面的代码中,将语句放在我的解决方案中 public MainWindow(){ InitializeComponent();
【解决方案2】:

您可以从 XAML 中删除所有事件订阅,并使用紧凑的语法(仅一行代码)将其放入代码后面,如下所示:

ImageButton.Click += (s, e) => { MessageBox.Show("test button clicked"); };

另外,删除您的事件处理过程:

private void ImageButtonClicked(object sender, RoutedEventArgs e)
{
    MessageBox.Show(this, "clicked image button");
}

除此之外,同一个按钮的另一个事件处理程序(XAML 中的PreviewMouseLeftButtonDown="ImageButtonLeftMouseButtonDown")似乎是多余的 - 您可以使用相应的事件处理过程将其删除。

所以,sn-p 的代码应该是这样的:

MainWindow()
{
    InitializeComponent();
    ImageButton.Click += (s, e) => { MessageBox.Show("test button clicked"); };

// ... the rest of the code...

与你的情况相关(ListView模板中的Button控件),参考这篇文章:WPF ListView with buttons on each line

【讨论】:

  • 当我想在后面的代码中添加事件时,我无法访问该按钮。在窗口构造函数中,甚至在事件方法中:o
  • 你给我的解决方案都没有奏效,因为我无法访问 ImageButton 属性。
  • 阅读修改后的帖子,它解释了如何去做。 Rgds,
  • 好的,我看到了问题:这不仅仅是一个按钮,它是 ListView 模板中的一个按钮。看看这个解决方案,它可能会有所帮助:stackoverflow.com/questions/456063/…
  • 我知道这是点击事件,我说的是Button控件。 XAML: CS:testButton.Click... 无法解析符号 testButton
【解决方案3】:

尝试使用 Tap 事件而不使用 click 事件。两个事件中的相同功能,

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多