サーチ…


XAMLからオブジェクトを読み込む

次のクラスの構造をXAMLで構築し、次にCLRオブジェクトに読み込む必要があります。

namespace CustomXaml
{
    public class Test
    {
        public string Value { get; set; }
        public List<TestChild> Children { get; set; } = new List<TestChild>(); 
    }

    public class TestChild
    {
        public string StringValue { get; set; }
        public int IntValue { get; set; }
    }
}

クラスには、明示的なコンストラクタがないか、空のクラスを提供する必要があります。 XAMLをきれいに保つには、コレクションを初期化する必要があります。 XAMLでコレクションを初期化することも可能です。

XAMLを読み取るには、 XamlServicesクラスを使用できます。参照に追加する必要があるSystem.Xamlで定義されています。次の行は、 test.xamlファイルをディスクから読み込みます。

Test test = XamlServices.Load("test.xaml") as Test;

XamlServices.Loadメソッドには、ストリームやその他のソースから読み込む複数のオーバーロードがあります。埋め込みファイルからXAMLを読み込む場合(WPFで行われた場合など)、デフォルトでPage設定されているBuild Actionプロパティは、 Embedded Resource変更する必要があります。それ以外の場合、コンパイラはWPFアセンブリへの参照を要求します。

読み取るXAMLファイルの内容は、次のようになります。

<Test xmlns="clr-namespace:CustomXaml;assembly=CustomXaml"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Value="test">
    <Test.Children>
        <TestChild StringValue="abc" IntValue="123"/>
        <TestChild StringValue="{x:Null}" IntValue="456"/>
    </Test.Children>
</Test>

純粋なxmlns定義は、接頭辞なしで同じ名前空間内のクラスの使用を可能にします。 xmlns:xの定義は、 {x:Null}ような構文を使用するために必要です。もちろん、必要に応じて他の名前空間やアセンブリの接頭辞を定義することもできます。

XAMLにオブジェクトを書き込む

次のクラスの構造をXAMLで構築し、次にCLRオブジェクトに読み込む必要があります。

namespace CustomXaml
{
    public class Test
    {
        public string Value { get; set; }
        public List<TestChild> Children { get; set; } = new List<TestChild>(); 
    }
    
    public class TestChild
    {
        public string StringValue { get; set; }
        public int IntValue { get; set; }
    }
}

XAMLを記述するために、 XamlServicesクラスを使用できます。参照に追加する必要があるSystem.Xamlで定義されています。次の行は、 Testというタイプのインスタンスtestをディスク上のtest.xamlファイルにtest.xamlます。

XamlServices.Save("test.xaml", test);

XamlServices.Saveメソッドには、ストリームやその他のターゲットに書き込むためのオーバーロードがいくつかあります。結果のXAMLは次のようになります。

<Test Value="test" xmlns="clr-namespace:CustomXaml;assembly=CustomXaml"
                   xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Test.Children>
    <scg:List x:TypeArguments="TestChild" Capacity="4">
      <TestChild IntValue="123" StringValue="abc" />
      <TestChild IntValue="456" StringValue="{x:Null}" />
    </scg:List>
  </Test.Children>
</Test>

純粋なxmlns定義は、接頭辞なしで同じ名前空間内のクラスの使用を可能にします。 xmlns:xの定義は、 {x:Null}ような構文を使用するために必要です。作成者は自動的にxmlns:scgを追加して、 TestオブジェクトのChildrenプロパティのList<TestChild>を初期化します。コンストラクタによって初期化されるプロパティに依存しません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow