2010-11-29 89 views
0

在這種情況下,當用戶點擊一些UIElement時,我希望這個元素被虛線邊框包圍。如果有其他物體被包圍,那麼這段代碼首先將其刪除。wp7,silverlight,爲什麼事件會發生兩次?

一切都很好,但「私人無效activateElem」發射兩次,我不知道爲什麼。也許有人可以幫忙,我真的沒有更多的想法。

有人知道一些想法來調試這樣的問題嗎?也許有一些方法可以打印出所有的事件隊列。有Silverlight的間諜,但我認爲它不適用於Windows Phone的工作7.

我的代碼:

public class ManipulationEngine 
{ 
    private Canvas sheet; 
    private static FrameworkElement current_active_element; 

    public ManipulationEngine(Canvas sheet) 
    { 
     this.sheet = sheet; 

     foreach (FrameworkElement elem in sheet.Children) 
     { 
      elem.MouseLeftButtonUp += new MouseButtonEventHandler(activateElem); 
     } 

    } 

    private void activateElem(object sender, MouseButtonEventArgs e) 
    { 
     FrameworkElement elem = sender as FrameworkElement; 

     if (current_active_element != null) 
     { 
      desactivateElem(); 
     } 

     Grid grid = new Grid(); 
     Rectangle recentagle = new Rectangle(); 

     grid.SetValue(Canvas.TopProperty, (double)elem.GetValue(Canvas.TopProperty) - 10); 
     grid.SetValue(Canvas.LeftProperty, (double)elem.GetValue(Canvas.LeftProperty) - 10); 

     DoubleCollection stroke = new DoubleCollection(); 
     stroke.Add(4); 
     stroke.Add(2); 
     recentagle.StrokeDashArray = stroke; 

     grid.Children.Add(recentagle); 
     sheet.Children.Remove(elem); 
     elem.Margin = new Thickness(10); 
     grid.Children.Add(elem); 
     sheet.Children.Add(grid); 

     current_active_element = elem; 
    } 



    private void desactivateElem() 
    { 
     if (current_active_element != null) 
     { 
      Grid grid = VisualTreeHelper.GetParent(current_active_element) as Grid; 

      grid.Children.Remove(current_active_element); 
      sheet.Children.Remove(grid); 

      current_active_element.SetValue(Canvas.TopProperty, (double)grid.GetValue(Canvas.TopProperty) + 10); 
      current_active_element.SetValue(Canvas.LeftProperty, (double)grid.GetValue(Canvas.LeftProperty) + 10); 
      current_active_element.Margin = new Thickness(0); 

      sheet.Children.Add(current_active_element); 

      current_active_element = null; 
     } 
    } 
+0

我想我已經找到了解決辦法。當我點擊FrameworkElement然後事件觸發。在此之後,我從Canvas中刪除FrameworkElement,並將其添加到網格中,然後將網格添加回Canvas。所以解決方案是:「e.Handled = true;」。它現在可以工作:) 所以之後FrameworkElement在樹中更深了,不知何故它再次觸發。 – 2010-11-29 19:18:58

回答

0

我真的建議尋找到的部件和狀態模型。您可以使用按鈕或單選按鈕來完成此操作。

通常,如果您要對可視化樹進行編碼更改,那麼您的做法不正確。

Karen Corby在MIX08上處理得很清楚,看看!

http://archive.visitmix.com/blogs/2008Sessions/T20/

盧克

相關問題