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