2016-06-30 10 views
1

Ich habe eine Zeichenfläche zur Laufzeit erstellt und Ereignishandler für Mausoperationen zugewiesen und es hat gut funktioniert. Ich entschied dann, dass ich eine Grenze um ihn herum haben wollte, und schuf so eine Grenze, die die Arbeiter davon abhielt zu arbeiten.C# Laufzeitgrenze um Raster verhindert Mausereignisbehandlung

Was habe ich versucht:

  • Ich habe die Grenze und die Daumen Objekte als Kommentar gekennzeichnet. Die Zeichenfläche ist gut gezeichnet und die Ereignisbehandlung funktioniert.
  • Ich entfernte dann die angehängten Event-Handler von obj und fügte die Event-Handler an die Grenzereignisse an, aber die Events feuern nur, wenn Sie direkt auf den Rand klicken, nicht darin.
  • Ich habe versucht, die Preview und Preview-Ereignisse auf der Leinwand und der Grenze.
  • Anbringen Event-Handler für beide Elemente

obj_MouseLeftButtonDown ruft nur ein Meldungsfeld, so kann ich alles testen. Würde jemand wissen, warum ich die Ereignisse nicht auf der Leinwand auslösen kann?

if (sender is Canvas) 
     { 
      Canvas obj = new Canvas(); 
      obj.Name = "Container"+Objcount; 
      obj.Height = 100; 
      obj.Width = 100; 
      obj.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(obj_MouseLeftButtonDown); 
      obj.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(obj_MouseLeftButtonUp); 
      obj.PreviewMouseMove += new MouseEventHandler(dragaround); 

      Border Border1 = new Border(); 
      Border1.BorderThickness = new Thickness(5); 
      Border1.BorderBrush = Brushes.Gray; 
      Border1.Child = obj; 
      desk.Children.Add(Border1); 

      Thumb obj1 = new Thumb(); 
      obj1.Name = "Thumb" + Objcount; 
      Canvas.SetRight(obj1, 0); 
      Canvas.SetBottom(obj1, 0); 
      obj1.DragDelta += new DragDeltaEventHandler(myThumb_DragDelta); 
      obj.Children.Add(obj1); 
      ++Objcount; 
     } 
+0

Wahrscheinlich jetzt sollten Sie Ereignishandler BEIDE Grenze und Leinwand anhängen –

+0

Ich wusste, dass ich etwas verlassen würde! Ja, ich habe Handler zu den Veranstaltungen für beide ohne Erfolg hinzugefügt, aber danke für Ihren Vorschlag. Es ist, als ob die Grenze aus zwei Elementen besteht und eines transparent ist, das über dem Randelement sitzt. Ich werde weiter nachforschen, danke. – RedChair

+0

versuchen Sie, den Schreibtisch desktop.children hinzuzufügen, nicht auf der Leinwand. Wenn alles andere fehlschlägt, kannst du immer das border \ rectangle auf der Leinwand manuell zeichnen: d –

Antwort

1

Das ist seltsam. Nachdem ich verschiedene Dinge ausprobiert, den Code kommentiert und neu arrangiert hatte, schaltete ich meinen Computer aus und ging für den Tag aus. Als ich zurückkam und alles wieder losließ, schaffte ich es, es zur Arbeit zu bringen. Ich weiß nicht wie, weil ich zurück bin zu dem ursprünglichen Code, den ich gepostet habe und meine Mausereignisse durchklicken. Ich bin mir nicht sicher, ob das jemals jemand anderes getan hat, aber für irgendjemanden da draußen, der solche Dinge erlebt, versuche einfach VS oder sogar deinen Computer neu zu starten. Ich bin verloren für eine Erklärung, aber es funktioniert jetzt. Danke Gleb Sevruk für die Zeit, die du dir genommen hast, um ein paar zusätzliche Dinge zu versuchen.