0

次のようなカスタム XAML ユーザー コントロールがあります。

<UserControl x:Class="CheckPoint.Modules.Beach.Beach_Shape"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Polygon Name="Shape"></Polygon>
    </Grid>
</UserControl>

xaml で XamlWrite.Save でシリアル化し、XamlReader.Load で再読み込みします。

XmlReader reader = XmlReader.Create(new StringReader(xml));
UserControl uc=(UserControl)XamlReader.Load(reader);
myGrid.Children.Add(uc);

「uc」は myGrid で正しく視覚化されますが、「uc」オブジェクトは論理的に正しくありません。これは、たとえば、xaml にあるにもかかわらず、背景、ストローク、またはポイントが設定されていないなど、Shape 要素が正しく読み込まれていないためです。

私はそれをリロードしようとします

Shape=myGrid.Findname("Shape");

しかし、それも機能しません。

それで、私の間違いはどこですか?

4

1 に答える 1

1

これはあなたの質問に対する答えかもしれません (MSDN の記事Serialization Limitations of XamlWriter.Saveから):

Save の呼び出しによってシリアル化されるものの基本的な考え方は、結果が実行時にシリアル化されるオブジェクトの表現になるということです。元の XAML ファイルのデザイン時のプロパティの多くは、XAML がメモリ内オブジェクトとして読み込まれるまでに既に最適化されているか失われている可能性があり、Save を呼び出してシリアル化するときに保持されません。シリアル化された結果は、アプリケーションの構築された論理ツリーの効果的な表現ですが、それを生成した元の XAML とは限りません。これらの問題により、広範な XAML デザイン サーフェイスの一部として保存のシリアル化を使用することが非常に困難になります。

于 2012-02-03T20:13:11.750 に答える