Есть ли способ, которым я могу устранить необходимость иметь App.Xaml и добавить ресурсы в App.Xaml.cs?

#xamarin #xamarin.forms

#xamarin #xamarin.forms

Вопрос:

Я хотел бы перенести это в свой App.Xaml.cs. Может кто-нибудь дать мне какое-нибудь предложение, как я могу это сделать?

 <Application
    x:Class="Test.App"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:converters="clr-namespace:Test">
    <Application.Resources>
        <converters:InverseBool x:Key="InverseBool" />
        <converters:ToUpper x:Key="ToUpper" />
        <converters:BoolToStringStateConverter x:Key="BoolToStringStateConverter" />
        <converters:AddHashToNumberConverter x:Key="AddHashToNumberConverter" />
        <converters:BoolToIntRowSpanConverter x:Key="BoolToIntRowSpanConverter" />
        <converters:StringToTextAligmentConverter x:Key="StringToTextAligmentConverter" />
        <converters:BoolToStringTextConverter x:Key="BoolToStringTextConverter" />
        <converters:BoolToStringTextForDeckSourcesConverter x:Key="BoolToStringTextForDeckSourcesConverter" />
        <converters:EpochSecondsToDateStringConverter x:Key="EpochSecondsToDateStringConverter" />
        <converters:IntervalToDaysConverter x:Key="IntervalToDaysConverter" />
        <converters:BoolToBackgroundColorConverter x:Key="BoolToBackgroundColorConverter" />
    </Application.Resources>
</Application>
 

Есть ли способ, которым я могу добавить это в App.xaml.cs вместо того, чтобы иметь это в файле XAML?

Комментарии:

1. forums.xamarin.com/discussion/98052/…

2. Привет, извините, что не понимаю, зачем нужно перемещать код из Xaml .cs в. Иногда нам не нужно Application.Resources их добавлять, просто добавьте их, в которых Xaml должен их использовать.

Ответ №1:

Вот шаги по удалению App.xaml , замене App.cs и добавлению ресурсов вашего конвертера Application.Resources .

Словарь ресурсов, Application.Resources , — это просто a Dictionary<string, object> , в который мы можем передать любую пару ключ-значение. Итак, мы передадим каждый IValueConverter из них, используя имя класса и экземпляр класса, например Application.Current.Resources.Add(nameof(InverseBool), new InverseBool());

1. Удалить App.xaml

  1. В обозревателе решений щелкните правой кнопкой мыши App.xaml
  2. В раскрывающемся меню правой кнопкой мыши выберите Удалить

введите описание изображения здесь

2. Добавить App.cs

  1. В обозревателе решений щелкните правой кнопкой мыши на проекте .NET Standard, содержащем ваш Xamarin.Формы пользовательского интерфейса
  2. В раскрывающемся меню правой кнопки мыши выберите Добавить> Новый файл

введите описание изображения здесь

  1. В окне «Новый файл» на левой панели выберите «Общие»
  2. В окне «Новый файл» на центральной панели выберите Пустой класс
  3. В окне «Новый файл» в нижнем текстовом поле «Имя» введите App
  4. В окне «Новый файл» нажмите «Создать»

введите описание изображения здесь

3. Добавьте ресурсы в App.cs

  1. В обозревателе решений откройте App.cs
  2. В App.cs добавьте ресурсы вашего конвертера, введя следующий код:
 public class App : Application
{
    public App()
    {
        Resources.Add(nameof(InverseBool), new InverseBool());
        Resources.Add(nameof(ToUpper), new ToUpper());
        Resources.Add(nameof(BoolToStringStateConverter), new BoolToStringStateConverter());
        Resources.Add(nameof(AddHashToNumberConverter), new AddHashToNumberConverter());
        Resources.Add(nameof(BoolToIntRowSpanConverter), new BoolToIntRowSpanConverter());
        Resources.Add(nameof(StringToTextAligmentConverter), new StringToTextAligmentConverter());
        Resources.Add(nameof(BoolToStringTextConverter), new BoolToStringTextConverter());
        Resources.Add(nameof(BoolToStringTextForDeckSourcesConverter), new BoolToStringTextForDeckSourcesConverter());
        Resources.Add(nameof(EpochSecondsToDateStringConverter), new EpochSecondsToDateStringConverter());
        Resources.Add(nameof(IntervalToDaysConverter), new IntervalToDaysConverter());
        Resources.Add(nameof(BoolToBackgroundColorConverter), new BoolToBackgroundColorConverter());

        MainPage = ...
    }
}
 

Ответ №2:

Если цель состоит в том, чтобы поддерживать App.xaml чистоту, вы можете использовать объединенный словарь (и это лучшая практика) и разделить все свои ресурсы на его собственный файл словаря, а затем использовать объединенный словарь для их объединения App.xaml .

Если цель состоит в том, чтобы определить ресурсы в .cs вместо .xaml, тогда вы можете получить доступ к этому словарю прямо из App.cs this.Resources словаря via .

Комментарии:

1. Моя цель — полностью удалить .xaml. Я надеюсь, что кто-нибудь сможет показать мне, как это сделать.