Avez-vous déjà rencontré un problème lors de l'attribution d'un gestionnaire d'événements click pour votre contrôle personnalisé WPF avec un contrôle de bouton imbriqué? Je fais.Créer un gestionnaire d'événements de clic personnalisé pour un contrôle utilisateur WPF qui contient un bouton?
Lorsque vous placez un tel contrôle utilisateur dans une fenêtre principale, disons Main.xaml, le MouseLeftButtonDown ne fonctionne pas, mais le PreviewMouseLeftButtonDown fonctionne comme un charme. Mais imaginez-vous dire à chaque développeur de votre équipe d'utiliser cet événement lors de l'utilisation de votre contrôle utilisateur ... Certains contrôles utilisateur dans votre bibliothèque ont MouseLeftButtonDown, d'autres PreviewMouseLeftButtonDown .... C'est un gâchis n'est-ce pas?
J'ai donc une solution mais je veux que quelqu'un veuille savoir s'il existe une manière élégante de créer votre gestionnaire d'événement personnalisé appelé "Click".
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 mon Main.xaml, la 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 bouton imbriqué, il exécute son gestionnaire "Click" personnalisé parent.
Existe-t-il une manière élégante d'accomplir le même effet?
Oui, je lisais votre commentaire et pensais à la création d'un contrôle personnalisé ayant un bouton comme contrôle de base. Il y avait beaucoup d'exemples montrant UserControl donc j'ai commencé avec cela, en utilisant Microsoft Expression Blend pour construire un bouton personnalisé. Après avoir vu que je ne pouvais pas contrôler l'événement de clic. Mais plus tard, je vais apprendre à créer un bouton personnalisé simple et élégant. –
Heureux qui a aidé! Bonne chance avec votre bouton personnalisé :) – Pwninstein