簡體   English   中英

如何使用XAML和后面的代碼序列化WPF用戶控件

[英]How can I serialize wpf user control with xaml and code behind

我想序列化WPF用戶控件xaml和代碼隱藏。 XamlWriter.Save()僅序列化xaml,因此在這種情況下我該怎么辦? 我的情況是,我有一個用戶控件,其中包括自定義方法,已訂閱的事件(例如,單擊按鈕),當我反序列化用戶控件時(要在運行時創建用戶控件),我想運行該事件和方法。 對不起,我的英語不是很好。

只是一個想法,您可以使用MEF為您的用戶控件建立插件結構。 您想即時創建用戶控件,但事件處理程序仍應在項目中的其他位置進行硬編碼。 通過插件結構,您可以收集插件並重復使用; 事件可以通過命令來處理。 也許給出一個方案,我們可以找出更多細節。

另外,ISerializable提供了一種用於字段(而不是方法或事件)的自定義二進制序列化的方法。 這是一個相關的問題: 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.

對於事件,每個事件都有一個處理程序名稱,您也可以將其處理程序名稱序列化為狀態,然后從其命名容器中通過保存的名稱找到它。 我沒有任何保存該方法的經驗。

如果您仍然想要保存和加載狀態(包括字段,事件和方法),那么序列化可能不是您所期望的正確方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM