#xaml #xamarin.forms
#xaml #xamarin.forms
Вопрос:
Я новичок в Xamarin
разработке. Я создал новую Xamarin XAML App(Xamarin.Forms Portable)
. В переносимом проекте там, где MainPage.Xaml
по умолчанию. Для создания MVVM
модели я создал три новые папки- Views, ViewModels, and Models
. Теперь я добавил новое MainPage.Xaml
в папку Views и собирался удалить MainPage.Xaml
страницу по умолчанию. Но здесь я вижу некоторую разницу на обеих страницах. У по умолчанию MainPage.Xaml
есть xmlns:local="clr-namespace:Test"
, а у нового MainPage.Xaml
нет. Опять же, у нового MainPage.Xaml
есть <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
, а у стандартного нет. Скриншоты:
Что означает эта разметка.Почему есть разница. Нужно ли что-то менять. Могу ли я удалить главную страницу по умолчанию.Xaml или я должен скопировать его в представлениях.Нужно ли копировать разметку со страницы по умолчанию на новую. Если да, то почему? Заранее спасибо
Ответ №1:
Обе страницы идентичны и будут отображаться одинаково.
На втором есть дополнительное объявление пространства имен Xml:
xmlns:local="clr-namespace:Test"
Это всего лишь объявление. Вы можете удалить ее или добавить на другую страницу без эффекта. Его цель — иметь возможность ссылаться на пользовательские представления, объявленные в текущей сборке и в пространстве имен (на этот раз в пространстве имен c #) Test
, например:
<ContentPage
...
xmlns:local="clr-namespace:Test"
x:Class="Test.MainPage">
<local:MyAwesomeView />
</ContentPage>
Ответ №2:
Удивительно, что вы решили начать с Xamarin и Xamarin.Формы!
Хотя я понимаю, что у вас могут возникнуть эти вопросы, это очень базовые знания XAML. Короткий ответ: вам не нужно беспокоиться об этом.
Длинный ответ:
Причина, по которой эти страницы отличаются, заключается просто в том, что это всего лишь шаблон, и тот, кто в Xamarin создал шаблон для проекта, может быть другим человеком, чем тот, кто создал шаблон для новой страницы XAML. Поэтому они решили это по-разному. Или, может быть, у него был хороший / плохой день, кто знает.
Label
На первой странице просто показано, как начать, и поэтому вы не начнете с пустого экрана.
Дополнительное пространство xmlns:local="clr-namespace:Test"
имен на этой новой странице фактически избыточно, но оно уже есть, поэтому вы можете использовать классы в своем проекте.
На самом деле это эквивалент using
списка в верхней части ваших классов. Поэтому всякий раз, когда вам нужно что-то из другого пространства имен, вы должны объявить это там. Поэтому, если вы создаете папку «Элементы управления», вы можете добавить атрибут xmlns:controls="clr-namespace:Test.Controls"
.
Обратите внимание, как я изменил local
controls
, это префикс, который вы будете использовать для определения своего экземпляра. Также я добавил правильное пространство Test.Controls
имен. Теперь, если вы хотите отобразить что-то на экране в вашем XAML из пространства имен controls, выполните следующие действия:
<ContentPage xmlns:controls="clr-namespace:Test.Controls" x:Class="Test.MainPage">
<!-- some stuff here -->
<controls:ReusableControlHere />
</ContentPage>
Где ReusableControl
может быть ваша собственная версия a Label
Button
или практически что угодно.
Комментарии:
1. Хорошо объяснено! Но
Label Text={Binding MainText}
. Можете ли вы сказать, что такое MainText.2. MainText должен быть свойством типа string в вашем DataContext (вашей ViewModel)