0
我有一些UserControl(一個標籤很少的網格)正在生成並添加到運行時的畫布。我已經爲UserControl和UserControl之間的每個UserControl和節點行(或連接器行)實施了拖放操作。清除畫布中的依賴屬性的UserControl
當我清除用戶控件與myCanvas.Children.Clear(),我的方法收到以下錯誤Node_LayoutUpdated():
這是我的用戶:
public partial class Foo : UserControl
{
public static readonly DependencyProperty AnchorPointProperty =
DependencyProperty.Register(
"AnchorPoint", typeof(Point), typeof(Foo),
new FrameworkPropertyMetadata(new Point(0, 0),
FrameworkPropertyMetadataOptions.AffectsMeasure));
public Point AnchorPoint
{
get { return (Point)GetValue(AnchorPointProperty); }
set { SetValue(AnchorPointProperty, value); }
}
private Canvas mCanvas;
public Foo(Canvas canvas, bool isInput)
{
InitializeComponent();
mCanvas = canvas;
this.LayoutUpdated += Node_LayoutUpdated;
}
void Node_LayoutUpdated(object sender, EventArgs e)
{
Size size = RenderSize;
Point ofs = new Point(size.Width/2, size.Height/2);
AnchorPoint = TransformToVisual(this.mCanvas).Transform(ofs);
}
}
我應該刪除UserControl之前刪除DependencyProperty,以及如何?有人可以解釋什麼原因導致這個錯誤信息,爲什麼?
因爲函數Node_LayoutUpdated駐留在用戶控件,我不能在MainWindows脫離它,我也得到「名稱Node_LayoutUpdated在當前上下文中不存在「。那我如何分離它呢? – KMC
@KMC嗯,最簡單的方法是將代碼放入UserControl的公共方法中(例如,在您的UserControl中實現'IDisposable'接口,將分離代碼放在那裏),然後在刪除代碼之前手動調用它。當發生'InvalidOperationException'時,您也可以捕獲異常並分離事件。您可以使用VisualTreeHelper來查找控件的父級,而不是在構造函數中設置mCanvas。(http://stackoverflow.com/questions/636383/how-can-i-find-wpf-controls-by-name - 或 - 型)。 –
抱歉,但我沒有關注你。什麼使Node_LayoutUpdated公開?這仍然無法在MainWindows中訪問 - 你是什麼意思手動調用它? – KMC