我想在VS2010的設置窗格中輸入一個XDocument
,但沒有成功。該類型是System.Xml.Linq.XDocument
設置中的XDocument
我得到的消息是:
不能轉換到類型的實例 「System.Xml.Linq.XDocument」
有誰知道周圍的方式這個?
ST
我想在VS2010的設置窗格中輸入一個XDocument
,但沒有成功。該類型是System.Xml.Linq.XDocument
設置中的XDocument
我得到的消息是:
不能轉換到類型的實例 「System.Xml.Linq.XDocument」
有誰知道周圍的方式這個?
ST
不能創建一個XDocument
直接設置,因爲XDocument
類不符合使用的設置,以確定criteria如果一個類型,可以用:
應用程序設置可以存儲爲XML序列化的任何數據類型或具有實現ToString/FromString的TypeConverter。最常見的類型是String,Integer和Boolean,但您也可以將值存儲爲Color,Object或連接字符串。
XDocument
提供了一種通過解析字符串,創建一個XML文檔,但它不是一個構造函數,它的靜態方法Load
(這需要一個TextWriter
,而不是字符串)。所以它不適合在設置中使用。
但是你可以繼承它,並給子類一個類型轉換器。幸運的是,用類型轉換器將XDocument
進行子類化很容易。首先,創建一個子類:
[TypeConverter(typeof(MyXDocumentTypeConverter))]
public class MyXDocument : XDocument
{
}
那類使用這個TypeConverter
:
public class MyXDocumentTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return (sourceType == typeof (string));
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
MyXDocument d = new MyXDocument();
d.Add(XDocument.Load(new StringReader((string) value)).Elements().First());
return d;
}
return null;
}
}
一旦有了這種設置,你可以寫這樣的代碼:
MyXDocument d = "<foo/>";
和字符串<foo/>
將被傳入類型轉換器,並通過Load
解析爲XDocument
,然後將其頂級元素添加到MyXDocument
。這是在Settings.Designer.cs
自動生成的代碼使用相同的分配:
return ((global::XmlSettingsDemo.MyXDocument)(this["Setting"]));
現在你可以進入你的設置對話框,並創建這種類型的設置。您無法導航到類型對話框中的類型;你必須手動輸入類型的全名(XmlSettingsDemo.MyXDocument
是我的名字)。
謝謝羅伯特給出了一個最全面和周到的答案。這使我能夠實現我的目標 - 再次感謝您! – Spod22