C# 如何使用xaml和代码隐藏序列化wpf用户控件

C# 如何使用xaml和代码隐藏序列化wpf用户控件,c#,wpf,serialization,user-controls,C#,Wpf,Serialization,User Controls,我想序列化wpf用户控件xaml和codebehindXamlWriter.Save()仅序列化的xaml,那么在这种情况下我能做什么?我的情况是,我有一个usercontrol,其中包括自定义方法、订阅的事件(例如:按钮单击)当我反序列化usercontrol(用于在运行时创建usercontrol)时,我希望运行该事件和方法。对不起,我的英语不是很好。只是一个想法,你可以使用MEF为你的用户控件建立一个插件结构。您希望动态创建用户控件,但事件处理程序仍应在项目中的其他位置进行硬编码;有了插件

我想序列化wpf用户控件xaml和codebehind
XamlWriter.Save()
仅序列化的xaml,那么在这种情况下我能做什么?我的情况是,我有一个usercontrol,其中包括自定义方法、订阅的事件(例如:按钮单击)当我反序列化usercontrol(用于在运行时创建usercontrol)时,我希望运行该事件和方法。对不起,我的英语不是很好。

只是一个想法,你可以使用MEF为你的用户控件建立一个插件结构。您希望动态创建用户控件,但事件处理程序仍应在项目中的其他位置进行硬编码;有了插件结构,你可以收集插件并重用它;这些事件可以通过命令处理。也许给出一个场景,我们可以了解更多细节

另外,ISerializable为字段而不是方法或事件提供了自定义二进制序列化的方法。这是一个相关的问题: ; 另一方面,您仍然可以尝试一些模式,例如web控件如何保存其视图状态;例如 两种虚拟方法:

public virtual byte[] SaveState(); // it saves the states for your custom control
public virtual void LoadState(byte[] state) // it restore your state back to the control.
自定义代码应类似于:

byte[] state = controlA.SaveState(); // this method saves its own state.
YourControl controlB = new YourControl();
controlB.LoadState(state); // this method load the save state from A to B itself.
对于该事件,每个事件都有一个处理程序名称,您还可以将其处理程序名称序列化为状态,并通过其命名容器中保存的名称找到它。我没有任何经验来保存这种方法


如果您仍要保存和加载状态,包括字段、事件和方法,我认为序列化可能不是您要寻找的正确方式。

为什么要序列化代码?您能解释一下为什么要这样做吗?您不能使用Reflector获取C代码吗?因为我将在运行时创建usercontrol。例如用户控件中的按钮在反序列化usercontrol时已单击事件(已订阅)。我要运行该事件。usercontrol继承ISerializable接口。我序列化和反序列化usercontrol而不丢失任何成员、事件和方法。我能解释一下吗,因为我的英语不是很好,欢迎你,希望能有所帮助。长期以来,我们一直在寻找序列化解决方案,但没有一个是100%完美的。:)