现在我正在尝试dragndrop扩展Grid的类的一些实例。在构造函数中,我将一些元素推入可视树中。 反序列化对象时会调用构造函数,并且会再次添加元素(并且根据我的拖动频率一次又一次)。遗憾的是,Children.Count告诉我,如果我从构造函数中检索值,则没有子元素。如果我从外面检索它(通过myGrid.Children.Count)它会给我更高(不需要的)金额。
我应该用什么其他功能初始化视觉效果?或任何其他方式来防止这些重复?
谢谢和欢呼
答案 0 :(得分:1)
需要一段时间,但我似乎找到了解决方案 现在我能够创建一个已经包含所有子类所需的可视元素的基类。并且它们可以通过XamlWriter / Reader进行解析而无需重复。呼。
1)扩展UserControl(不要Add-> UserControl但Add-> Class并手动继承)
2)把标准的InitializeControl();进入构造函数
3)实现InitializeControl()并将布局,子添加和其他内容放在一起
4)xamlwrite / xamlread / inherit like crazy
希望它对某人有所帮助,并且我没有监督不可预见的事情。
- 编辑:当然。 会有重复,但我们无法看到它们。 在XamlReader完成之后,我的InitializeComponent()创建了UIElements,之后进行了xaml解析。代码中的任何引用都涉及代码创建的控件,它们不显示:/
叹息。
一个远非完美的方法是将一个开关放入Initialized事件处理程序,如下所示:
if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();
在Initialize()将UIElements添加到可视化树的地方,Reinitialize()只是找到正确的引用(通过control = FindName("controlName")
),Multiinitialze()重新创建事件处理程序以及在途径中丢失的其他内容XamlReader。
好吧,现在您可以在xaml中实例化自定义继承的UserControl,但没有简单的方法来设置属性。这是因为设置属性发生在Initialized-event之前,并且有等待的NullPointerExceptions。你可以用绑定来解决这个问题。
但是有一个更简单的方法。请告诉我!