WPF Richtextbox Event bei Linksklick funktioniert nicht

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    WPF Richtextbox Event bei Linksklick funktioniert nicht

    Hallo,

    ich habe in WPF eine Richtextbox definiert:

    XAML:

    XML-Quellcode

    1. <RichTextBox x:Name="rtb_targettext" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="5" Grid.RowSpan="19" VerticalScrollBarVisibility="Auto" FontFamily="Georgia" FontSize="12" MouseLeftButtonUp="rtb_mauslinks">
    2. <RichTextBox.Resources>
    3. <Style TargetType="{x:Type Paragraph}">
    4. <Setter Property="Margin" Value="0"/>
    5. </Style>
    6. </RichTextBox.Resources>
    7. </RichTextBox>


    Code behind:

    VB.NET-Quellcode

    1. Private Sub rtb_mauslinks(sender As Object, e As MouseButtonEventArgs)
    2. MessageBox.Show("hi")
    3. End Sub



    Wenn ich jetzt aber einen Linksklick auslöse, sollte über Codebehind ein Skript ausgeführt werden, leider passiert gar nichts. Was habe ich hier übersehen?

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    und auch dieses Rätsel ist nun gelöst:

    Die RTB ignoriert personalisiert Mausklickevents von Haus aus. Man muss der RTB also sagen, dass sie eine böse RTB ist und das lassen soll: "pfui bah!" oder anders ausgedrückt: e.Handled = True Dies funktioniert aber nicht mit MouseLeftButtonUp oder ähnlichen, da muss PreviewMouseLeftButtonUp bemüht werden.

    XAML (nur eine kleine Änderung):

    XML-Quellcode

    1. <RichTextBox x:Name="rtb_targettext" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="5" Grid.RowSpan="19" VerticalScrollBarVisibility="Auto" FontFamily="Georgia" FontSize="12" PreviewMouseLeftButtonUp="rtb_mauslinks">
    2. <RichTextBox.Resources>
    3. <Style TargetType="{x:Type Paragraph}">
    4. <Setter Property="Margin" Value="0"/>
    5. </Style>
    6. </RichTextBox.Resources>
    7. </RichTextBox>


    im Codebehind muss dann noch die eine oben genannte Zeile hinzugefügt werden. Damit das Event nun aber nicht schon beim Anklicken der leeren RTB ausgelöst wird, prüfen wir noch, ob schon Text eingefügt wurde (ersten 3 Zeilen plus if-Statement):

    VB.NET-Quellcode

    1. Dim tp_start As TextPointer = rtb_targettext.Document.ContentStart
    2. Dim tp_end As TextPointer = rtb_targettext.Document.ContentEnd
    3. Dim difference As Integer = tp_start.GetOffsetToPosition(tp_end)
    4. If difference > 2 Then
    5. MessageBox.Show("hi")
    6. e.Handled = True
    7. End If


    Besuchen Sie uns bald wieder mit einer neuen Folge: Unlösbare Rätsel der Programmierwelt ;)
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Translating-IT schrieb:

    Dies funktioniert aber nicht mit MouseLeftButtonUp oder ähnlichen, da muss PreviewMouseLeftButtonUp bemüht werden.


    In deinem anderen thread habe ich dir einen Link dazu bereitgestellt der dir das Verhalten von Bubbling-Events erklärt.

    Tutorialreihe <WPF lernen/>

    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. ##

    Hallo Sascha,
    in welchem anderen Thread?
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Hallo

    Sorry, dachte der wäre auch von dir, ist er aber nicht. Weil es war fast Zeitgleich kann man sagen. Der hier: Die Wege der Events sind unergründlich
    Aber den Link habe ich dir ja gepostet.

    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. ##

    Kein Problem. Mein Thread war eh schon gelöst. Dein Link ist aber immer wieder hilfreich.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.