如何在Xamarin.Forms的Android平台上,在NavigationBar左侧添加ToolbarItem?

7

我需要在导航栏的左侧(如下图所示)为弹出窗口添加一个关闭按钮。 我只需要它用于弹出窗口,因此不会对其他元素/导航产生潜在问题。

enter image description here

在Google中有一些关于此的建议,但我只看到了iOS的示例(这不是在iOS自定义渲染器中处理的大事),但没有提示如何(轻松地)处理Android。

只需明确一点,将其定义为Xamarin.Forms类似于以下内容(或代码后台):

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

有什么想法吗?


你也可以在弹出页面中使用PushModalAsync,并设计此页面的顶部栏,其中包含关闭和勾选图像。既然您将其视为弹出窗口,则最好使用PushModalAsync而不是PushAsync。 - hashimks
@hashimks,我没有使用任何类似于“PushModal”方法,因为我使用MvvmCross框架,它可以自己处理所有事情。所以,这只是XF布局问题。 - Agat
我也在谈论同样的事情。你可以设计这个页面的顶层,用一个布局来容纳这些叉和勾。你可以通过PushModalAsync简单地调用它...另一种方法是使用TitleView。但你会得到一个导航效果,而不是弹出式动画。 - hashimks
你不理解我的意思。使用MvvmCross时,你永远不会调用(也不应该调用)任何与“PushModal”相关的内容... - Agat
2个回答

12

使用Xamarin Forms 3.2,可以通过TitleView处理更复杂的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://learn.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/


2
感谢您的回复。这个解决方案确实可以轻松地添加按钮。但是,当在那里添加一些视图时,它会删除初始标题标签。这是否意味着唯一的方法是实现自定义标题(但它看起来与标准外观不同)? - Agat
另外,你知道绑定会如何工作吗?标准的 {Binding ...} 无法绑定到页面 BindingContext。 - Agat
事实上,添加自定义视图的缺点是您需要“设计”它 - 以模仿默认外观。我还没有尝试过绑定上下文设置,所以还不知道为什么或如何完成... - Depechie
如果您想要更高级的示例,请查看https://github.com/davidortinau/TheLittleThingsPlayground/blob/47b07d2e2e6edb54dab5ebc0d1ed8c2e7234d06d/TheLittleThingsPlayground/Views/ThreeTwoPage.xaml。 - Depechie
是的。这就是我想处理它的方式。但问题在于,在不同的平台上,标签大小(至少)可能会有所不同(更不用说颜色等),因此该视图的标题将与其他“标准”视图不同。 但总的来说,您的答案解决了添加按钮的简单方法。 - Agat

0
有点晚了,但这个方法可行,在将要被 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>

1
已经有一年半前的帖子中有完全相同的答案! - Agat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接