Пользовательская кнопка исключение - PullRequest
0 голосов
/ 09 апреля 2020

Я новичок ie в разработке WPF и C#. Я пытаюсь создать свой собственный класс кнопок на основе стандартной кнопки WPF.

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

Затем я пытаюсь поместить его в Window в XAML.

<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: не удалось создать PreviewMouseLeftButtonDown из текста simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown. Строка № 7 и позиция 10.

ArgumentException: Невозможно связать с целевым методом, поскольку его подпись или прозрачность безопасности не совместимы с таковой для типа делегата.

Не могли бы вы объяснить мне что я делаю не так? Что-то не так с определением обработчика события PreviewMouseLeftButtonDown или отсутствует в базовом классе, но я не знаю, что мне нужно сделать, чтобы это исправить.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Подпись неверна. Если я позволю Visual Studio определить сигнатуру, она придет:

 private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {

 }

Таким образом, ваши аргументы должны быть MouseButtonEventargs; not RoutedEventArgs

0 голосов
/ 09 апреля 2020

Измените тип второго аргумента обработчика событий на MouseButtonEventArgs:

private void simpleButtonDetailCancelButton_PreviewMouseLeftButtonDown(object sender, 
    MouseButtonEventArgs e)
{ 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...