UserControl Handler hinzufügen

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ThomasSt.

    UserControl Handler hinzufügen

    Folgendes Usercontrol:

    XML-Quellcode

    1. <UserControl x:Class="UserControl1"
    2. x:Name="UserControl1"
    3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    7. mc:Ignorable="d"
    8. xmlns:mycontrol="clr"
    9. d:DesignHeight="300" d:DesignWidth="300">
    10. <Grid>
    11. <Button Content="Button1" Name="Button1" />
    12. <Button Content="Button2" Name="Button2" />
    13. </Grid>
    14. </UserControl>


    Den jeweiligen Controls Button wurde ein Eeignis zugewiesen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    2. MessageBox.Show("Btn1")
    3. End Sub
    4. Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
    5. MessageBox.Show("Btn2")
    6. End Sub


    Das UserCOntrol befindet sich in einem Fenster:

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. x:Name="MainWindow"
    3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    5. xmlns:mycontrol="clr-namespace:WpfApplication1"
    6. Title="MainWindow" Height="350" Width="525">
    7. <Grid>
    8. <mycontrol:UserControl1/>
    9. </Grid>
    10. </Window>
    11. Wie weise ich den Controls (hier Button) im Usercontrol ein individuelles Ereignis (hier MessogeBox) zu? Das Ereignis soll allerdings möglichst imWindow geändert werden und nicht im Usercontrol zugewiesen werden.
    Hallo Thomas

    Das klappt so nicht wirklich. Das was du vorhast geht meines wissens nach nicht da du Handler nur auf die CodeBehind der KLasse welche im XAML mit dem Attribut x:Class angegeben ist abbilden kannst.

    Genau deshalb gibt es das Bindingsystem in der WPF. Davon hast du sicher bereits was gehört. das gibt es da die WPF im Grunde ein völlig anderes System ist wie WinForms.
    Mittels CommandBinding und den entsprechenden DependencyProperties klappt dein Vorhaben wunderbar.

    Ich bin in meiner TutorialReihe noch nicht bei Commands und/oder DependencyProperties aber mit diesem Stichworten solltest du einiges Googeln können.

    Da ich deinen Wissensstand zu Vb.Net und WPF aber nicht kenne (aber vermute das du eher am Anfang stehst) unterlasse ich es jetzt dir hier Beispielcode zu Posten da ich denke das wäre zu viel für dich und würde vermutlich den Rahmen sprengen diesen zu erklären.
    Solltest du dennoch soweit sein das du über Binding und Commands bescheid weist kann ich dir gerne etwas posten.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Guten Tag Sascha, wenn ich das richtig verstanden habe

    - macht es also nicht viel Sinn Controls in einem UserControl miteinander zu kombinieren wenn das UserControl individuelle Ereignise benötigt bzw. das Ereignis im jeweiligen CodeBehind angepaßt werden soll?
    - ist es möglich das ein Binding im XAML ein individuelles Ereignis des CodeBehind ersetzen kann. Kannst Du mir einen Link oder Stichworde nennen nach denen ich suchen sollte? Willst Du mir bitte ein sehr einfaches Beispiel für CommandBinding z.B. Das Ereignis bei Button -> MessagBox.Show geben?

    Vielen Dank

    ThomasSt schrieb:

    Willst Du mir bitte ein sehr einfaches Beispiel für CommandBinding z.B. Das Ereignis bei Button -> MessagBox.Show geben?

    Wollen ja. Aber ich denke das es dich im Moment überfordern würde. Schau mal in den Tutorialbereich hier im Forum. Da gibt es diverse WPF Tutorials welche auch Commands besprechen.
    Das Thema ist NUR in Verbindung mit Binding und einer ViewModel-Klasse verwendbar, welshalb ich jetzt kein Beispiel erstelle da du ja KEIN Binding verwendest.

    ThomasSt schrieb:

    macht es also nicht viel Sinn Controls in einem UserControl miteinander zu kombinieren wenn das UserControl individuelle Ereignise benötigt bzw. das Ereignis im jeweiligen CodeBehind angepaßt werden soll?

    Man soll es in der WPF nicht machen. Geht aber.
    In der Klasse des UserControls hast du ja deine Handler. Diese Handler könnten ja Events werfen. Diese Events kannst du dann von aussen Abonnieren.
    So wäre das sicher machbar und ist auch gängiger Weg für solch eine Problemlösung.

    Hierfür kann ich dir gerne ein Beispiel posten solltest du nicht weiterkommen.

    Nur aus interesse, hast du meine Schlagwort überhaupt nachgelesen?? Hast du dir Binding angesehen??

    Probier mal mit Events ans Ziel zu kommen, das wäre so der WinForms-Like Weg. Wenn du probleme hast Poste den Code den du hast und wir werden sehen wo es hakt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich abe jetzt einem Control ein Command zugewiesen:

    XML-Quellcode

    1. <Window.CommandBindings>
    2. <CommandBinding
    3. Command="ApplicationCommands.Cut"
    4. CanExecute="CutCommand_CanExecute"
    5. Executed="CutCommand_Executed"/>
    6. <CommandBinding
    7. Command="ApplicationCommands.Paste"
    8. CanExecute="PasteCommand_CanExecute"
    9. Executed="PasteCommand_Executed"
    10. />
    11. </Window.CommandBindings>
    12. <Button
    13. Command="ApplicationCommands.Cut"/>
    14. <Button
    15. Command="ApplicationCommands.Paste"/>


    VB.NET-Quellcode

    1. Private Sub CutCommand_Executed(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    2. MessageBox.Show("Beispiel1")
    3. Private Sub PasteCommand_Executed(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    4. MessageBox.Show("Beispiel2")
    5. End Sub
    6. End Sub


    Jetzt möchte ich das o.g. Beispiel auf ein UserControl anwenden. Allerdings hat UserCOntrol kein Command.
    Wie könnte das o.g. Beispiel für ein UserControl aussehen?