c# - 按钮不会触发 Click 事件

标签 c# wpf events button click

我在 UserControl 中有一个 Button:

<UserControl.Resources>
    <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
        <ContentPresenter />
    </ControlTemplate>
</UserControl.Resources>    
<Button Template="{StaticResource ButtonTemplate}" Click="Button_Click" />

但是,如果我指定 Template,此按钮不会触发 Click 事件。
为什么?我该如何解决这个问题?

后台代码:

public event RoutedEventHandler Click;

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (Click != null)
        Click(sender, e);
}

最佳答案

您的按钮模板是一个简单的 ContentPresenter。在您提供给我们的代码中,您没有在按钮中放置任何内容,因此它不会有任何大小。将无法点击。

<Window x:Class="StackOverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow">

<Window.Resources>
    <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
        <ContentPresenter />
    </ControlTemplate>
</Window.Resources>

<Button Template="{StaticResource ButtonTemplate}" Click="Button_Click">
    <TextBlock Text="test" />
</Button>

</Window>

此代码有效,如果您单击“测试”,则会正确触发按钮的 Click 事件。我在窗口中完成了它,但在用户控件中是相同的。

如果您正在谈论自定义点击事件,则仅当您在其上附加处理程序时才会触发该事件。

关于c# - 按钮不会触发 Click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976292/

相关文章:

c++ - 单个 SetEvent() 可以触发多个 WaitForSingleObject()

javascript - 访问事件中设置的变量

c# - 依赖注入(inject)无法解析在 Azure 中运行的 .NET Core Function App 中的类型服务

c# - 如何成功使用 existingResponse ="Auto"?

c# - 如何在 ASP.Net MVC3 中将值从一个 Controller 传递到另一个 Controller

WPF ListView非整体滚动

元素子元素的 JQuery 触发事件

c# - 如何正确清理 C# 中的互操作对象

c# - 将 PNG 图像保存到内存流会导致错误

c# - WPF:在 UserControl 的构造函数中加载数据会破坏设计器