gpt4 book ai didi

c# - XamlWriter/Reader -> 多个构造函数调用导致重复元素

转载 作者:行者123 更新时间:2023-11-30 18:08:25 39 4
gpt4 key购买 nike

我有点被困在这里了。我正在使用 dragndrop-library,它通过 XamlWriter.Save() 序列化拖动的 UIElement。

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

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

感谢和欢呼

最佳答案

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

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

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

--编辑:当然。会有重复但我们看不到它们。在 XamlReader 通过之后,有由我的 InitializeComponent() 创建的 UIElements 以及之后得到 xaml 解析的 UIElements。代码中的任何引用都涉及未显示的代码创建的控件:/

感叹。

解决这个问题的一个远非完美的方法是将一个开关放入一个已初始化的事件处理程序中,如下所示: if(HasContent)<br/>
Initialize();<br/>
else<br/>
Reinitialize();<br/>
Multiinitialize();

其中 Initialize() 会将 UIElement 添加到可视化树中,Reinitialize() 只是找到正确的引用(通过 control = FindName("controlName") ),Multiinitialze() 重新创建事件处理程序以及在通过 XamlReader 的过程中丢失的其他内容。

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

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

关于c# - XamlWriter/Reader -> 多个构造函数调用导致重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182391/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com