wpf: klicken der linken Maustaste wird nicht erkannt
Ich neu in WPF und lernen, wenn ich das material, das ich konfrontiert mit seltsamen Problem.
Baue ich eine Schaltfläche, die Ebenen enthalten, die mit text-block-und ich will erkennen, wo der Benutzer klicken Sie auf die Schaltfläche selbst, auf "erste", "zweite" oder "Dritte" (I-Ausgang einer Nachricht).
Alles funktioniert einwandfrei außer der Knopf nicht ein Ereignis auszulösen, wenn der Benutzer klickt mit der linken Taste (nur mit mittleren oder rechten Taste).
also meine Frage: Warum habe ich nicht erhalten eine Meldung, wenn ich drücken Sie auf die Taste selbst mit der linken Maustaste (und ich bekomme die msg-box mit anderen Maustasten) ?
XAML:
<Button Margin="145,152,144,102" Padding="5,5,5,5" HorizontalAlignment="Center" VerticalAlignment="Center" MouseDown="Button_MouseDown" Height="57" Width="214">
<WrapPanel>
<WrapPanel HorizontalAlignment="Center" VerticalAlignment="Center"></WrapPanel>
<TextBlock Foreground="Black" FontSize="24" MouseDown="TextBlockFirst_MouseDown" >First </TextBlock>
<TextBlock Foreground="Red" FontSize="24" MouseDown="TextBlockSecond_MouseDown">Second </TextBlock>
<TextBlock Foreground="Blue" FontSize="24" MouseDown="TextBlockThird_MouseDown" >Third </TextBlock>
</WrapPanel>
</Button>
Code:
private void TextBlockFirst_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on first");
}
private void TextBlockSecond_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on second");
}
private void TextBlockThird_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on third");
}
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
//This event not working good
//only middle & right mouse buttons are recognized
MessageBox.Show("You click on the button");
}
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
MouseDown
Veranstaltung ist einebubbling event
, das Blasen von seinem Urheber zu seinem root-parent. AberClick
Ereignis fressen dieMouseDown
Ereignis und nicht zulässt, dass die Veranstaltung vom sprudelnden bis-Taste.Können Sie
PreviewMouseDown
Ereignis, das einetunnelling event
die Tunnel von der Wurzel an den Absender. So Taste wird zunächst das Ereignis und dann die nachfolgenden textBlock.Siehe das Bild unten für das klare Bild:
UPDATE
Haken nur
PreviewMouseDown
event-on-Taste und entfernen Handler aus einzelnen textBlocks. Überprüfen Sie füre.OrignialSource
um zu sehen, obTextBlock
ist die eigentliche original-Quelle oder-Taste.XAML
PreviewMouseDown
auch in der text-Blöcke, die ich erhalten zwei message-box-per-click (ich will nur ein msg und das wahre..)PreviewMouseDown
Ereignis auf die Schaltfläche und nicht auf den TextBlock, und überprüfen Siee.OriginalSource
im hf zu sehen, für die Urheber der Veranstaltung.Es funktioniert nicht, weil das erste Feuer ist ein Ereignis, an das
Button.Click
, und wenn es funktioniert, es Konflikte mit den Ereignissen wie:MouseLeftButtonDown
,MouseUp
,MouseDown
.Machen gearbeitet hat, in diesem Fall müssen Sie definieren eine
PreviewMouseDown
Ereignis, weil es einTunnel
Ereignis, das bedeutet, dass es gehen wird der VisualTree Hierarchie, deshalb ist es ausgelöst, bevor die Blase Ereignisse.Auch, als alternative, können Sie die
Button.Click
- Ereignis für die Schaltfläche.