Laden...

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

Erstellt von Flohen vor 9 Jahren Letzter Beitrag vor 9 Jahren 4.182 Views
F
Flohen Themenstarter:in
86 Beiträge seit 2007
vor 9 Jahren
[gelöst] WPF: Image feuert kein Doubleclick-Event

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

2.207 Beiträge seit 2011
vor 9 Jahren

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

F
Flohen Themenstarter:in
86 Beiträge seit 2007
vor 9 Jahren

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.

R
212 Beiträge seit 2012
vor 9 Jahren

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;
}

F
Flohen Themenstarter:in
86 Beiträge seit 2007
vor 9 Jahren

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

J
641 Beiträge seit 2007
vor 9 Jahren

cSharp Projekte : https://github.com/jogibear9988

F
Flohen Themenstarter:in
86 Beiträge seit 2007
vor 9 Jahren

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