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
Vous devez vous connecter pour publier un commentaire.
À aller hors de ce mdm20 disais... Pourquoi êtes-vous créer un UserControl (une collection de contrôles groupés en 1) où l'on pouvait beaucoup plus facilement créer un CustomControl (contrôle qui étend les fonctionnalités d'un contrôle existant, tel qu'un Bouton)? En supposant qu'un Bouton est le seul contrôle que vous souhaitez avoir dans CustomButton, je recommande fortement d'un CustomControl sur ce que vous avez (un UserControl).
Exemple de UserControl vs CustomControl ici
Espérons que cette aide!
Heureux que contribué à! Bonne chance avec votre bouton personnalisé 🙂
OriginalL'auteur Mark Carpenter
Si votre œuvre d'un bouton, pourquoi ne pas tirer de bouton?
Pour répondre à votre question, tous vous en avez besoin.
OriginalL'auteur mdm20
Ne pouvais pas cette ligne:
être remplacé par
?
Autres que que, bien que la réponse dépend exactement le comportement que vous souhaitez. Si vous voulez cliquez sur l'événement de votre contrôle de l'utilisateur pour déclencher lorsque vous cliquez sur le centre du bouton, puis je pense que vous êtes la manipulation de la bonne façon. D'autre part, si vous souhaitez que l'événement click pour déclencher à chaque fois que vous cliquez n'importe où dans les limites du contrôle de l'utilisateur, alors vous êtes probablement mieux de style ou d'hériter de la norme de contrôle de bouton. Rappelez-vous que dans WPF le contenu du bouton peut être tout autre élément, y compris un autre bouton.
OriginalL'auteur Martin Harris