2016-05-13 15 views
0

Ich habe diese sehr einfache Schaltfläche in einer WPF, die eine Funktion preview() auf MouseDown- und Funktion hide() auf MouseUp anrufen sollte. Aber es funktioniert nicht und nicht einmal seinen Event-Handler. Was ist mein Fehler?Warum der MouseDown Event-Handler nicht getroffen wird?

Ich habe versucht, die Hintergrundeigenschaft zu ändern, keine Verwendung. MouseLeave und MouseClick beide funktionieren, aber das ist nicht was ich will.

XAML:

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" MouseDown="previewButton_MouseDown" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" > 
    <StackPanel Height="98" Width="49"> 
     <Image Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" /> 
     <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/> 
    </StackPanel> 
</Button> 

Code hinter

private void previewButton_TouchDown(object sender, TouchEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_TouchUp(object sender, TouchEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_TouchLeave(object sender, TouchEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_Click(object sender, RoutedEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_MouseLeave(object sender, MouseEventArgs e) 
{ 
    HidePreviewImage(); 
} 
+0

Haben Sie zufällig das PreviewMouseDown-Ereignis versucht? – Bobby

+0

@bob Nein, habe ich nicht. Was ist das? –

Antwort

2

Handle PreviewMouseDown anstelle von MouseDown-Ereignis, PreviewMouseUp anstelle von MouseUp und so weiter. Es sollte für Sie arbeiten.

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" PreviewMouseDown="previewButton_MouseDown" MouseDown="previewButton_MouseDown" PreviewMouseUp="" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" > 
      <StackPanel Height="98" Width="49"> 
       <Image x:Name="Image1" Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" /> 
       <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/> 
      </StackPanel> 
     </Button> 

Alle FrameworkElements setzen diese Ereignisse frei. Alle "Preview ..." - Ereignisse sind "Tunnel" -Ereignisse, während die anderen Mausereignisse "Bubble" -Ereignisse sind. Die Tunnelereignisse werden zuerst auf Elementen höherer Ebene, z. Wenn Sie mit der Maus über ein Schaltflächenelement fahren, wird das erste Preview-Mausereignis zum Fenster und dann durch alle seine Nachkommen nach unten verschoben, bis es das ultimative Ziel erreicht, in diesem Fall die Schaltfläche. Dann beginnt das normale, d. H. Nicht Vorschau "Mausereignis von dort aus zu sprudeln, bis es das Fenster erreicht. Überall in dieser Kette kann ein Event-Handler das Ereignis als behandelt markieren und den Prozess stoppen. Hier wird das MouseDown-Bubbling-Ereignis von Ihrem Textblock in der Schaltfläche behandelt.

0

Bestimmte Kontrollen behandeln Eingabeereignisse intern, in der Regel Sie die Tunnel Version der Ereignisse verwenden können (Preview*) in diesen Fällen. Siehe MSDN.

Verwandte Themen