Ссылка на статические объекты, созданные в XAML - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать некоторые данные времени разработки, используя XAML. Я боюсь, что не могу найти в Интернете руководство о том, как создать массив, ссылаясь на другие объекты, созданные в XAML. Нечто похожее на это ...

<MyClass x:Key="Obj1" Prop1="..." Prop2="..." />
<MyClass x:Key="Obj2" Prop1="..." Prop2="..." />
<x:Array Type={x:Type my:MyClass} x:Key="MyObjects">
  <StaticResource Key="Obj1" />
  <StaticResource Key="Obj2" />
</x:Array>

К сожалению, вышесказанное не работает. Есть ли что-то, что будет работать?

Я воспроизвел ошибку, создав пустое приложение Xamarin Forms с последней версией VS Studio для Mac. Я добавил это к ContentPage.Resources ...

    <ContentPage.Resources>
        <ResourceDictionary>
            <n:String x:Key="myString">Hello World</n:String>
            <x:Array x:Key="myArray" Type="{x:Type n:String}">
                <StaticResource Key="myString" />
            </x:Array>
        </ResourceDictionary>
    </ContentPage.Resources>

Я получаю следующую ошибку при запуске приложения:

Xamarin.Forms.Xaml.XamlParseException
... StaticResource not found for key myString

Я создаю приложение Xamarin.Forms с использованием последней версии Visual Studio для Mac.

Кроме того, я знаю, что могу создавать объекты как прямые потомки массива. Я пытаюсь создать их отдельно, чтобы включить их в разные коллекции.

Обновление (после предложения @ junior-jiang-msft)

Я попробовал предложение Джуниора Цзяна, но получаю следующую ошибку сборки ...

/Users/savasp/Projects/test/test/MainPage.xaml: Error: The given key 'Xamarin.Forms.Xaml.XmlName' was not present in the dictionary.

Вот пример формы XAML в новом ванильном проекте Xamarin.Forms ...

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="test.MainPage">
    <ContentPage.Resources>
        <x:String x:Key="m1">hello</x:String>
        <x:String x:Key="m2">world</x:String>
        <x:Array x:Key="array" Type="{x:Type x:String}">
            <Setter Value="{StaticResource m1}" />
            <Setter Value="{StaticResource m2}" />
        </x:Array>
    </ContentPage.Resources>
    <StackLayout>
        <!-- Place new controls here -->
        <ListView ItemsSource="{StaticResource array}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding}" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Может быть, вы неправильно поняли что-то о ResourceDictionary. Для значения и назначения StaticResource.

<ContentPage...>
    <ContentPage.Resources>
        <x:String x:Key="myStringOne">Hello String One</x:String>
        <x:String x:Key="myStringTwo">Hello String Two</x:String>
        <x:Array x:Key="myArray" Type="{x:Type x:String}">
          <x:String>mono</x:String>
          <x:String>monodroid</x:String>
          <x:String>monotouch</x:String>
          <x:String>monorail</x:String>
          <x:String>monodevelop</x:String>
          <x:String>monotone</x:String>
          <x:String>monopoly</x:String>
          <x:String>monomodal</x:String>
          <x:String>mononucleosis</x:String>
      </x:Array>
    </ContentPage.Resources>

    <StackLayout>
        <ListView ItemSource="{StaicResource myArray}"/>
    </StackLayout>
</ContentPage>

Вы можете обратиться к этому документу Создание и использование ResourceDictionary .

0 голосов
/ 12 июня 2019

Вы должны заявить так:

  <x:Array Type="{x:Type x:String}">
            <x:String>Hello</x:String>
            <x:String>World</x:String>
        </x:Array>

Или другой пример использования Color Object:

 <ListView.ItemsSource>
            <x:Array Type="{x:Type Color}">
                <Color>Aqua</Color>
                <Color>Black</Color>
                <Color>Blue</Color>
                <Color>Fuchsia</Color>
                <Color>Gray</Color>
                <Color>Green</Color>
                <Color>Lime</Color>
                <Color>Maroon</Color>
                <Color>Navy</Color>
                <Color>Olive</Color>
                <Color>Pink</Color>
                <Color>Purple</Color>
                <Color>Red</Color>
                <Color>Silver</Color>
                <Color>Teal</Color>
                <Color>White</Color>
                <Color>Yellow</Color>
            </x:Array>
        </ListView.ItemsSource>

Вы можете проверить документы разметки XAML здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...