Как добавить ToolbarItem в левую часть NavigationBar в Xamarin.Forms на Android?

Мне нужен иметь, близкий кнопка (в данном конкретном случае) налево из Панель навигации, как показано ниже. Мне он нужен только для всплывающих окон, поэтому нет потенциальных проблем с другими элементами / навигациями.

Как добавить ToolbarItem в левую часть NavigationBar в Xamarin.Forms на Android?

В Google есть несколько предложений по этому поводу, но я видел только примеры iOS (и это не такая уж большая проблема в iOS custom renderer), но нет подсказок, как с этим справиться (с легкостью) с Android.

Чтобы быть ясным, он нужен для определения Xamarin.Forms, подобного этому (или codebehind):

<ContentPage.ToolbarItems>
    <ToolbarItem Text = "X" Priority = "-1" Command = "{Binding GoCancel}"/>
    <ToolbarItem Icon = "icon_save" Command = "{Binding GoSave}"/>
</ContentPage.ToolbarItems>

Есть предположения?

вы также можете использовать PushModalAsync для всплывающей страницы и создать верхнюю панель на этой странице с изображениями закрытия и отметки. Поскольку вы упомянули об этом как о всплывающем окне, лучше использовать PushModalAsync вместо PushAsync

hashimks 03.10.2018 14:04

@hashimks, я не использую какие-либо методы, подобные "PushModal", поскольку я работаю с фреймворком MvvmCross, который обрабатывает все самостоятельно. Итак, это только вопрос компоновки XF.

Agat 03.10.2018 14:08

Я тоже говорю о том же. Вы можете спроектировать верхний слой этой страницы с макетом, содержащим эти крестики и галочки. Вы можете назвать это просто PushModalAsync ... Другой способ - использовать TitleView. Но вы получите эффект навигации вместо всплывающего окна, как анимация.

hashimks 03.10.2018 14:13

Вы меня не понимаете. С MvvmCross вы никогда не вызываете (и не должны) ничего, связанного с "PushModal" ...

Agat 03.10.2018 14:49
5
4
6 425
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В Xamarin Forms 3.2 появился новый способ обработки более сложных сценариев с помощью NavigationBar. Он называется TitleView.

С его помощью вы можете вставить любой View, какой захотите, в NavigationBar.

Пример XAML:

<ContentPage xmlns = "http://xamarin.com/schemas/2014/forms"
             xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class = "NavigationPageTitleView.TitleViewPage">
    <NavigationPage.TitleView>
        <Slider HeightRequest = "44" WidthRequest = "300" />
    </NavigationPage.TitleView>
    ...
</ContentPage>

Подробнее об этом здесь https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical#displaying-views-in-the-navigation-bar и пример проекта можно найти здесь https://developer.xamarin.com/samples/xamarin-forms/Navigation/TitleView/

Спасибо за ответ. И это решение действительно позволяет легко добавить кнопку. Однако при добавлении туда какого-либо вида он удаляет исходную метку заголовка. Означает ли это, что единственный способ получить заголовок - реализовать собственный (но тогда он будет выглядеть иначе, чем стандартный)?

Agat 03.10.2018 14:47

Кроме того, знаете ли вы, как тогда будет работать привязка? Стандартный {Binding ...} не позволяет выполнять привязку к BindingContext страницы.

Agat 03.10.2018 14:48

В самом деле, добавление настраиваемого представления имеет обратную сторону, заключающуюся в том, что вам нужно будет его «спроектировать» - так что имитируйте внешний вид по умолчанию. И я еще не пробовал настройку контекста привязки, поэтому пока не знаю, почему и как это должно быть сделано ...

Depechie 03.10.2018 16:01

Если вам нужен более сложный пример, посмотрите github.com/davidortinau/TheLittleThingsPlayground/blob/…

Depechie 03.10.2018 16:04

Ага. Вот как я думал с этим справиться. Но проблема в том, что на разных платформах размер Lable (по крайней мере) может быть разным (не говоря уже о цветах и ​​т. Д.), Поэтому заголовок для этого конкретного вида будет отличаться от других «стандартных». Но в целом ваш ответ решает добавление кнопки простым способом.

Agat 03.10.2018 16:50

Отказаться поздно, но это сработает, добавьте это на страницу, которая будет вызываться в PushModalAsync:

<NavigationPage.TitleView>
        <StackLayout Orientation = "Horizontal" VerticalOptions = "Center" Margin = "20,0,0,0" Spacing = "0">
            <ImageButton Source = "img.png"
                         HorizontalOptions = "Start"
                         Clicked = "BackButton_Clicked"
                         HeightRequest = "25"
                         WidthRequest = "25"/>
        </StackLayout>
</NavigationPage.TitleView>

Точно такой же ответ над плакатом уже есть полтора года назад!

Agat 18.05.2020 00:04

Другие вопросы по теме