2015-10-15 33 views
1

我开始与WPF,我有一个问题。请帮帮我。谢谢,抱歉我的英文不好!如何删除/删除在画布中的ContentControl WPF

我已经将ContentControl添加到Canvas,并且我想要删除/删除它。

绘制ContentControl中代码:

ContentControl cc = new ContentControl(); 
cc.Content = shape; 
cc.Height = h; 
cc.Width = w; 
Style s = myCanvas.FindResource("DesignerItemStyle") as Style; 
cc.Style = s; 
Canvas.SetLeft(cc, x); 
Canvas.SetTop(cc, y); 
myCanvas.Children.Add(cc); 

我使用的HitTest删除它,但我只能删除塑造

private void myCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     Point pt = e.GetPosition((Canvas)sender); 
     HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);    
     if (result != null) 
     { 
      myCanvas.Children.Remove(result.VisualHit as Shape); //it works with shape 
      // i have changed it into myCanvas.Children.Remove(result.VisualHit as ContentControl); 
      //but it didn't work with ContentControl   
     } 
    } 

回答

1

它是如此,因为ContentControlShape的父母,和Canvas的孩子们包含承载形状的ContentControl。 你可以这样做,以解决您的问题:)

private void myCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    DependencyObject ob = FindAncestor<ContentControl>((DependencyObject)e.Source); 
    if (ob.GetType() == typeof(ContentControl)) 
      myCanvas.Children.Remove(ob as ContentControl);   

} 

public T FindAncestor<T>(DependencyObject dependencyObject) 
     where T : DependencyObject 
    { 
     var parent = VisualTreeHelper.GetParent(dependencyObject); 

     if (parent == null) return null; 

     var parentT = parent as T; 
     return parentT ?? FindAncestor<T>(parent); 
    } 
+0

非常感谢,但它仍然无效。 :( –

+0

做了一些编辑,现在试试:) – faztp12

+0

非常感谢你,它的作品就像一个魅力! :) –

1

我建议你下一个解决方案:

 private void myCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     var dObj = sender as DependencyObject; 
     if(dObj == null) return; 
     var ob = dObj.GetChildOfType<ContentControl>(); 
     if (ob != null) 
     { 
      myCanvas.Children.Remove(ob); 
     } 
    } 

助手代码:

public static T GetChildOfType<T>(this DependencyObject depObj) 
    where T : DependencyObject 
    { 
     if (depObj == null) return null; 

     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      var child = VisualTreeHelper.GetChild(depObj, i); 

      var result = (child as T) ?? GetChildOfType<T>(child); 
      if (result != null) return result; 
     } 
     return null; 
    } 

只是把帮助公众静态内因为它是扩展方法

关于