2011-04-21 50 views
1

我正在使用XAMLWriter來序列化一些控件。它適用於其他控件,但不適用於DataGrid。首先,它不能序列化DataGrid列,這非常煩人(如果有人有解決方案,太棒了!),所以我設法找到解決方法。 此代碼:XAMLWriter DataGrid列失敗

DataGrid dataGrid = new DataGrid(); 
DataGridTextColumn dgTextColumn = new DataGridTextColumn(); 
dataGrid.Columns.Add(dgTextColumn); 
XamlWriter.Save(dataGrid); 

產生這樣的輸出:<DataGrid />

根本沒有列所以,我想通了,我可以添加的列項:

DataGrid dataGrid = new DataGrid(); 
DataGridTextColumn dgTextColumn = new DataGridTextColumn(); 
dataGrid.Items.Add(dgTextColumn);//notice the change 
XamlWriter.Save(dataGrid); 

而且我得到了這個輸出,這對我來說是足夠的:

<DataGrid > 
    <DataGridTextColumn /> 
</DataGrid> 

比我可以manua lly add <DataGrid.Columns> and </DataGrid.Columns>

任何人都可以解釋我爲什麼XAMLWriter的行爲是這樣的,有沒有辦法成功序列化DataGrid列?

回答

0

列和項目不是一回事。 Items屬性用於數據網格的數據內容。在你的第二個代碼示例中,你將Columns添加爲項目。

瞭解爲什麼列沒有序列號和解決以下的解釋:Cannot serialize DataGridTextColumn in DataGrid with XamlWriter.Save

+0

是的,我故意,因爲我的列沒有序列化。因此,我將它們添加爲項目,並在項目周圍添加行,現在它們是列。但這不是我的問題... – Vale 2011-04-21 13:11:37

1
+0

我試過了XamlServices.Save,並得到以下異常:「保存延期加載內容拋出異常。」那是什麼意思?什麼是延期加載內容? – Vale 2011-04-21 13:36:14

+1

以下是來自MSDN的內容:「重要信息: 如果您正在處理Windows Presentation Foundation(WPF)類型或基於WPF的類型,則XamlServices不是推薦的XAML閱讀或XAML寫入API集,對於WPF用法,請使用System.Windows。用於讀取或加載XAML的Markup.XamlReader;用於寫回XAML的System.Windows.Markup.XamlWriter。這些類在其實現中內部使用System.Xaml API;但是,它們還提供對WPF特定概念的支持,這些概念會影響XAML讀取和寫入,例如依賴屬性的優化。「 – Vale 2011-04-21 13:42:18

+0

所以,我們回到了開始。 XamlServices.Save方法不適用於我的情況,而XamlWriter.Save適用於除DataGrid列之外的所有內容。 – Vale 2011-04-21 13:47:13