xamlreaderを使用して文字列からグリッドを作成します
-
05-10-2019 - |
質問
このようなXAMLグリッドの文字列表現があります:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Canvas Background="Yellow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Label Content="textik" />
</Canvas>
</Grid>
私がする必要があるのは、この文字列からグリッドオブジェクトを作成することです。私は多くのアプローチを試しましたが、これまでのところ最も近いのは以下のコードです。
string content = "<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Canvas Background=\"Yellow\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Label Content=\"textik\" /></Canvas></Grid>";
// the string is created programatically, I just put it here to see what it looks like at the end of the process
Stream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(content));
object objGrid = XamlReader.Load(stream);
Grid myGrid = (Grid) objGrid;
ただし、XamlParsedExceptionは、ルート要素が欠落していると言っています。
XAMLコードに間違いがありませんか?それともアプローチは悪いですか?
答えをありがとう
解決
どのバージョンのフレームワークを使用していますか? 4には、system.xamlに追加のクラスがあります。これらのクラスはより柔軟です。使用できます System.Xaml.XamlServices.Load(stream);
ゆるいXAMLに正確なグリッドオブジェクトを取得します。ただし、VS2010で4と3.5の両方を使用すると、正確なコード(2番目のスニペット)が期待される結果を返します。あなたの側に問題が何であるかはわかりませんが、それはあなたが投稿したコードではないかもしれません。
他のヒント
追加してみてください xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ルートグリッド要素に。また、キャンバスではXMLNを再び必要としません(ただし、弦が不必要に大きくなることを除いて、それも傷つけません)。
所属していません StackOverflow