xaml
Arbetar med anpassade XAML-filer
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.