3

我有点卡在这里。我正在使用一个拖放库,它通过 XamlWriter.Save() 对拖动的 UIElements 进行序列化。

现在我正在尝试拖放扩展网格的类的一些实例。在构造函数中,我将一些元素推送到可视化树中。当对象被反序列化并再次添加元素时,构造函数被调用(一次又一次取决于我拖放的频率)。可悲的是,如果我从构造函数中检索值,Children.Count 告诉我没有子元素。如果我从外部(通过 myGrid.Children.Count)检索它,它会给我更高的(不需要的)数量。

我应该使用其他任何功能来初始化视觉效果吗?或任何其他方式来防止这些重复?

谢谢和欢呼

4

1 回答 1

1

花了一段时间,但我似乎找到了解决方案。
现在我能够创建一个已经包含所有子类所需的视觉元素的基类。并且它们可以通过 XamlWriter/Reader 解析而不会重复。哇。

1) 扩展 UserControl (不要 Add->UserControl 但 Add->Class 并手动继承)
2) 放置标准 InitializeControl(); 进入构造函数
3) 实现 InitializeControl() 并将布局、添加子项和其中的任何内容
4) xamlwrite/xamlread/inherit 疯狂

希望它对某人有所帮助,并且我没有监督不可预见的..

——编辑:当然。会有重复,但我们看不到它们。在 XamlReader 完成之后,我的 InitializeComponent() 创建了 UIElements,之后获得了 xaml-parsed 的那些。代码中的任何引用都与未显示的代码创建控件有关:/

叹。

一个远非完美的解决方法是将开关放入 Initialized 事件处理程序中,如下所示: Initialize() 将 UIElements 添加到可视化树中, Reinitialize() 只是找到正确的引用 (by ) 和 Multiinitialze () 重新创建事件处理程序以及在通过 XamlReader 的过程中丢失的其他内容。if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();

control = FindName("controlName")

好吧,现在您可以在 xaml 中实例化自定义继承的 UserControl,但没有简单的方法来设置属性。那是因为设置属性发生在 Initialized-event 之前,并且有 NullPointerExceptions 等待。我猜你可以用绑定来解决这个问题。

但必须有一个更简单的方法。请告诉我!

于 2010-07-07T11:02:47.007 回答