首页 > 解决方案 > 自定义按钮异常

问题描述

我是 WPF 和 C# 开发的新手。我正在尝试基于标准 WPF 按钮创建自己的按钮类。

public class _BaseButton : Button
{
    public _BaseButton() : base()
    {
    }
}

然后我尝试将它放在 XAML 中的 Window 中。

<Window x:Class="Sample.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Sample"
    Title="MainWindow" Height="350" Width="525">
    <Grid >
        <local:_BaseButton Height="30" Width="100" Content="I am crashing" VerticalAlignment="Center" PreviewMouseLeftButtonDown="simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown"/>
    </Grid>
</Window>

如您所见,在 XAML 代码中,我定义了 PreviewMouseLeftButtonDown 事件的处理程序。它在后面的窗口代码中实现。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    
    private void simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown(object sender, RoutedEventArgs e)
    {
    }
}

这样一个简单的应用程序的构建完成没有错误。当我运行应用程序时,它会崩溃并出现以下两个异常:

System.Windows.Markup.XamlParseException:无法从文本 simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown 创建 PreviewMouseLeftButtonDown。第 7 行和第 10 行位置。

ArgumentException:无法绑定到目标方法,因为它的签名或安全透明度与委托类型的不兼容。

你能解释一下我做错了什么吗?事件处理程序的定义有问题PreviewMouseLeftButtonDown,或者基类中缺少它,但我不知道我必须做些什么来修复它。

标签: c#wpfxaml

解决方案


将事件处理程序的第二个参数的类型更改为MouseButtonEventArgs

private void simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown(object sender, 
    MouseButtonEventArgs e)
{ 
}

推荐阅读