Zoeken…


Een object lezen van XAML

Overweeg dat een structuur van de volgende klassen moet worden geconstrueerd in XAML en vervolgens moet worden gelezen in een CLR-object:

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

Klassen mogen geen expliciete constructor hebben of een lege geven. Om de XAML schoon te houden, moeten collecties worden geïnitialiseerd. Het initialiseren van collecties in XAML is echter ook mogelijk.

Om XAML te lezen, kan de klasse XamlServices worden gebruikt. Het wordt gedefinieerd in System.Xaml dat moet worden toegevoegd aan referenties. De volgende regel leest vervolgens het bestand test.xaml van schijf:

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

De methode XamlServices.Load heeft verschillende overbelastingen die vanuit streams en andere bronnen kunnen worden geladen. Als XAML wordt gelezen uit een ingesloten bestand (zoals het wordt gedaan in WPF), moet de eigenschap Build Action die standaard is ingesteld op Page worden gewijzigd in Embedded Resource . Anders zal de compiler om verwijzingen naar WPF-assemblages vragen.

De inhoud van het te lezen XAML-bestand zou er ongeveer zo uit moeten zien:

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

Met de pure xmlns definitie kunnen klassen in dezelfde naamruimte zonder voorvoegsel worden gebruikt. De definitie van de xmlns:x is nodig om constructies zoals {x:Null} . Natuurlijk kunnen voorvoegsels voor andere naamruimten of samenstellingen indien nodig worden gedefinieerd.

Een object naar XAML schrijven

Overweeg dat een structuur van de volgende klassen moet worden geconstrueerd in XAML en vervolgens moet worden gelezen in een CLR-object:

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

Om XAML te schrijven kan de XamlServices klasse worden gebruikt. Het wordt gedefinieerd in System.Xaml dat moet worden toegevoegd aan referenties. De volgende regel schrijft vervolgens de instantie test , die is van het type Test om het bestand test.xaml op schijf:

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

De XamlServices.Save methode heeft verschillende overbelastingen om naar streams en andere doelen te schrijven. De resulterende XAML zou er ongeveer zo uit moeten zien:

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

Met de pure xmlns definitie kunnen klassen in dezelfde naamruimte zonder voorvoegsel worden gebruikt. De definitie van de xmlns:x is nodig om constructies zoals {x:Null} . De schrijver voegt automatisch de xmlns:scg een initialiseren List<TestChild> voor de Children eigenschap van de Test object. Het is niet afhankelijk van het feit dat de eigenschap door de constructeur wordt geïnitialiseerd.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow