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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
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;
}
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...
cSharp Projekte : https://github.com/jogibear9988
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