Créer un gestionnaire d'événements click pour WPF usercontrol qui contient un bouton?

avez-vous déjà eu un problème lors de l'affectation d'un gestionnaire d'événements click pour votre WPF personnalisé usercontrol avec un imbriquée bouton de contrôle? Je ne.

Quand vous mettez un tel contrôle de l'utilisateur dans une fenêtre principale, disons Principal.xaml, le MouseLeftButtonDown ne fonctionne pas, mais le PreviewMouseLeftButtonDown fonctionne comme un charme.

Mais imaginez-vous en disant à chaque développeur de votre équipe à utiliser cet événement lors de l'utilisation de votre usercontrol... Certains contrôles utilisateur dans la bibliothèque vous a MouseLeftButtonDown, d'autres PreviewMouseLeftButtonDown.... C'est un gâchis ne convenez-vous pas?

Donc j'ai une solution mais je veux quelqu'un pour voir si il ya une manière élégante de la création de votre propre gestionnaire d'événement appelé "Clic".

Dans mon usercontrol appelé CustomButton.xaml.cs, j'ai jusqu'à présent:

public partial class CustomButton: UserControl
{

    public CustomButton()
        : base()
    {
        this.InitializeComponent();

    }

    public delegate void ClickHandler(object sender, EventArgs e);
    public event EventHandler Click;

    public void Button_Click(object sender, RoutedEventArgs e) {//execute daddy's button click
            (((sender as Button).Parent as Grid).Parent as CustomButton).Click(sender, e);

            e.Handled = false;

    }

Dans mon CustomButton.xaml

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="YourCompany.UI.Controls.CustomButton" d:DesignHeight="72.5" d:DesignWidth="200">
<UserControl.Resources>
blablabla
</UserControl.Resources>

<Grid x:Name="LayoutRoot">
    <Button Style="{DynamicResource CustomButton}" 
            Width="{Binding ElementName=CustomButton, Path=ActualWidth}" 
            Cursor="Hand" Foreground="#ffffff" FontSize="28" Margin="8,8,0,12" 
            HorizontalAlignment="Left" 
            Content="Custom Button" Click="Button_Click" />


</Grid>

Maintenant dans ma Main.xaml, l'appelant, j'ai:

<Window x:Class="YourCompany.MyProject.Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MyProject!" Height="600" Width="800" 
MinWidth="800" MinHeight="600" WindowState="Maximized" WindowStartupLocation="CenterScreen"
xmlns:bigbola="clr-namespace:YourCompany.UI.Controls;assembly=YourCompany.UI.Controls">

<mycontrols:CustomButton Name="test" MyImage=".\Images\btnOptions.png" Cursor="Hand" 
            Texto="See options" Click="test_Click"
            Margin="168.367,176.702,253.609,0" ToolTip="See all options" Height="76.682" 
            VerticalAlignment="Top"></mycontrols:CustomButton>

Explication:

dans le contrôle usercontrol, lorsque vous cliquez sur le imbriquée bouton, il exécute son parent personnalisé ", Cliquez sur" gestionnaire.

Est-il un moyen élégant pour accomplir le même effet?

OriginalL'auteur Junior M | 2009-05-20