Sök…


Läser ett objekt från XAML

Tänk på att en struktur av följande klasser bör konstrueras i XAML och sedan läsas in i ett CLR-objekt:

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; }
    }
}

Klasserna bör antingen inte ha någon tydlig konstruktör eller tillhandahålla en tom. För att hålla XAML ren måste samlingarna initialiseras. Initialisering av samlingar i XAML är dock också möjlig.

För att läsa XAML XamlServices klassen XamlServices användas. Det definieras i System.Xaml som måste läggas till referenser. Följande rad läser sedan test.xaml filen från disken:

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

Metoden XamlServices.Load har flera överbelastningar att ladda från strömmar och andra källor. Om du läser XAML från en inbäddad fil (som om den görs i WPF) Build Action egenskapen Build Action som är inställd på Page standard ändras till dvs. Embedded Resource . Annars kommer kompilatorn att be om referenser till WPF-enheter.

Innehållet i XAML-filen som ska läsas bör se ut så här:

<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>

Den rena xmlns definitionen tillåter användning av klasser i samma namnområde utan prefix. Definitionen av xmlns:x är nödvändig för att använda konstruktioner som {x:Null} . Naturligtvis kan prefix för andra namnutrymmen eller enheter definieras efter behov.

Att skriva ett objekt till XAML

Tänk på att en struktur av följande klasser bör konstrueras i XAML och sedan läsas in i ett CLR-objekt:

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; }
    }
}

För att skriva XAML XamlServices klassen XamlServices användas. Det definieras i System.Xaml som måste läggas till referenser. Följande linje skriver sedan instans test som är av typen Test till filen test.xaml på disk:

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

Metoden XamlServices.Save har flera överbelastningar att skriva till strömmar och andra mål. Den resulterande XAML ska se ut så här:

<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>

Den rena xmlns definitionen tillåter användning av klasser i samma namnområde utan prefix. Definitionen av xmlns:x är nödvändig för att använda konstruktioner som {x:Null} . Författaren lägger automatiskt till xmlns:scg att initiera en List<TestChild> för egenskapen Children i Test . Det förlitar sig inte på att fastigheten initialiseras av konstruktören.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow