1

次のような 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>

私がする必要があるのは、この文字列から 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

2 に答える 2

2

どのバージョンのフレームワークを使用していますか? 4 では、より柔軟な System.Xaml の追加クラスがあります。System.Xaml.XamlServices.Load(stream);Loose xaml で正確な Grid オブジェクトを取得するために使用できます。ただし、VS2010 で 4 と 3.5 の両方を使用すると、正確なコード (2 番目のスニペット) が期待される結果を返します。問題があなたの側にあるかどうかはわかりませんが、投稿したコードではない可能性があります。

于 2010-09-25T21:05:11.547 に答える
0

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"ルート Grid 要素にも追加してみてください。また、Canvas で再度 xmlns を使用する必要はありません (ただし、文字列が不必要に大きくなることを除けば、害はありません)。

于 2010-09-24T11:17:27.020 に答える