Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] WPF: Image feuert kein Doubleclick-Event
Flohen
myCSharp.de - Member



Dabei seit:
Beiträge: 88
Herkunft: Schwäbische Alb

Themenstarter:

[gelöst] WPF: Image feuert kein Doubleclick-Event

beantworten | zitieren | melden

Hallo,

ich habe einen eigenen Window-Style definiert. In diesem ist auch ein Icon/Image implementiert.
Jetzt möchte ich bei einem Doppelklick, dass das Fenster schließt, doch leider bekomme ich keinen Zugriff auf das entsprechende Event des Images.
Ich kenn mich mit den WPF Events noch nicht sonderlich gut aus, vielleicht kann mir einer von euch helfen.

<Style x:Key="MyWindowStyle"
           BasedOn="{StaticResource MyWindowBaseStyle}"
           TargetType="{x:Type Window}">
        <Setter Property="ResizeMode" Value="CanResize" />
        <EventSetter Event="Loaded" Handler="WindowLoaded" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Border x:Name="PART_Container" Padding="7,7,7,5">
                        <Grid TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType">
                            <Border x:Name="PART_Border"
                                    Width="Auto"
                                    Height="Auto"
                                    Background="{StaticResource BackgroundBrush}"
                                    BorderBrush="{StaticResource BorderBrush}"
                                    BorderThickness="1">
                                <DockPanel HorizontalAlignment="Stretch"
                                           VerticalAlignment="Stretch"
                                           Background="Transparent">
                                    <Border x:Name="TitleBar"
                                            Background="{StaticResource BackgroundBrush}"
                                            BorderThickness="0"
                                            DockPanel.Dock="Top">
                                        <Grid Height="32" Background="Transparent">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="36" />
                                                <ColumnDefinition />
                                                <ColumnDefinition Width="34" />
                                                <ColumnDefinition Width="34" />
                                                <ColumnDefinition Width="34" />
                                            </Grid.ColumnDefinitions>
                                            <Image x:Name="Icon"
                                                   Grid.Column="0"
                                                   Width="32"
                                                   Height="32"
                                                   Margin="4,-7,0,7"
                                                   HorizontalAlignment="Right"
[COLOR]Hier möchte ich das Event feuern[/COLOR]
                                                MouseLeftButtonDown="IconMouseLeftButtonDown"
                                                   PreviewMouseLeftButtonDown="IconMouseLeftButtonDown"
                                                   MouseDown="IconMouseLeftButtonDown"
                                                   Source="{Binding Path=Icon,
                                                                    Mode=OneWay,
                                                                    RelativeSource={RelativeSource TemplatedParent}}"/>
                                                
                                            <TextBlock x:Name="Caption"
                                                       Grid.Column="1"
                                                       Margin="4,0,0,0"
                                                       HorizontalAlignment="Center"
                                                       VerticalAlignment="Center"
                                                       FontFamily="Segoe UI"
                                                       FontSize="12"
                                                       Opacity="0.66"
                                                       Text="{Binding Path=Title,
                                                                      Mode=OneWay,
                                                                      RelativeSource={RelativeSource TemplatedParent}}" />
....
....
....

Gruß
Flohen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Flohen am .
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2459
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo Flohen,

du kannst einerseits das DoubleClick-Event im Codebehind abfangen., dann dein Command triggern. Aber besser ist es das mit MVVM (und Commands) zu machen und sich sein eigenes Control zu schreiben.

Beschrieben ist das hier:

MVVM: Creating an Image that takes a Double-Click command

Hoffe das hilft...

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
Flohen
myCSharp.de - Member



Dabei seit:
Beiträge: 88
Herkunft: Schwäbische Alb

Themenstarter:

beantworten | zitieren | melden

Hallo,

ich kann in diesem Fall leider kein MVVM benutzen, da dass ganze ein Template ist.
Natürlich habe ich versucht das Event im Code-Behind abzufangen, aber genau da liegt das Problem. Es feuert kein Event. Gar kein Event wird für das Image gefeuert, weil es wahrscheinlich schon irgendwo vorher abgefangen wird. Nur weiß ich nicht wo.

Und mit Auskennen bei den Events, meine ich, dass ich nicht weiß wer, was zu welchen Zeitpunkt macht.

Aber danke für die Hilfe.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Flohen am .
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

beantworten | zitieren | melden

Du kannst alternativ auch mit PreviewMouseLeftButtonDown arbeiten

für ein doppelklick machst du dann einfach

  private static void MyControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount != 2)
                return;
}
private Nachricht | Beiträge des Benutzers
Flohen
myCSharp.de - Member



Dabei seit:
Beiträge: 88
Herkunft: Schwäbische Alb

Themenstarter:

beantworten | zitieren | melden

Danke für den Tip. Aber wie du oben im Code vielleicht siehst, hab ich auch das schon probiert. Leider bekomme ich kein Event von diesem Image. Das muss irgendwo vorher abgefangen werden, nur leider weiß ich nicht wo...
private Nachricht | Beiträge des Benutzers
jogibear9988
myCSharp.de - Member



Dabei seit:
Beiträge: 586
Herkunft: Offenau

beantworten | zitieren | melden

Handling events from within a ControlTemplate in WPF
cSharp Projekte : https://github.com/jogibear9988
private Nachricht | Beiträge des Benutzers
Flohen
myCSharp.de - Member



Dabei seit:
Beiträge: 88
Herkunft: Schwäbische Alb

Themenstarter:

beantworten | zitieren | melden

So, nach langem suchen, war die Lösung doch so nah.

Da ich mein Fenster mit WindowChromes angepasst habe, fehlte nur das Property: WindowChrome.IsHitTestVisibleInChrome="True"

Trotzdem danke an alle, die versucht haben mir zu helfen.

Gruß
Flohen
private Nachricht | Beiträge des Benutzers