Haben Sie jemals ein Problem beim Zuweisen eines Click-Ereignishandlers für Ihr benutzerdefiniertes WPF-Benutzersteuerelement mit einem verschachtelten Schaltflächensteuerelement gefunden? Ich mache.Erstellen Sie einen benutzerdefinierten Click-Ereignishandler für ein WPF-Benutzersteuerelement, das eine Schaltfläche enthält?
Wenn Sie solche Benutzersteuerelemente in einem Hauptfenster verwenden, sagen wir Main.xaml, funktioniert MouseLeftButtonDown nicht, aber PreviewMouseLeftButtonDown funktioniert wie ein Charm.
Aber stell dir vor, du sagst jedem Entwickler in deinem Team, dieses Ereignis zu verwenden, wenn du deine Benutzersteuerung verwendest ... Einige Benutzersteuerungen in deiner Bibliothek haben MouseLeftButtonDown, andere PreviewMouseLeftButtonDown .... Es ist ein Chaos, meinst du nicht?
Ich habe also eine Lösung, aber ich möchte, dass jemand sieht, ob es eine elegante Möglichkeit gibt, Ihren eigenen Event-Handler namens "Click" zu erstellen.
In meinem Usercontrol genannt CustomButton.xaml.cs, habe ich bisher:
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;
}
In meinem 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>
Jetzt in meinem Main.xaml, die Anrufer, ich habe:
<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>
Erläuterung:
Wenn Sie in der Benutzersteuerung auf die verschachtelte Schaltfläche klicken, wird der übergeordnete benutzerdefinierte "Click" -Handler ausgeführt.
Gibt es eine elegante Möglichkeit, den gleichen Effekt zu erzielen?
Ja, ich habe Ihren Kommentar gelesen und darüber nachgedacht, ein benutzerdefiniertes Steuerelement mit einem Button als Basissteuerung zu erstellen. Es gab viele Beispiele, die UserControl zeigten, also begann ich damit, mit Microsoft Expression Blend eine benutzerdefinierte Schaltfläche zu erstellen. Nachdem ich gesehen habe, konnte ich das Klickereignis nicht kontrollieren. Aber später werde ich lernen, wie man eine einfache und elegante benutzerdefinierte Schaltfläche erstellt. –
Froh, dass geholfen hat! Viel Glück mit Ihrem benutzerdefinierten Button :) – Pwninstein