Xamarin Forms - 在工具栏项目中显示取消按钮而不是返回按钮(iOS)

4
我希望将iOS上导航栏中的标准“返回”按钮更改为“取消”按钮,就像iOS中“新联系人”屏幕上的按钮一样。我正在使用Xamarin Forms。
编辑:
模态框的XAML
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="Xrm.Mca.Views.MyModalView">

    <ContentPage.ToolbarItems>
            <ToolbarItem x:Name="Cancel" Text="Cancel" ></ToolbarItem>  
            <ToolbarItem x:Name="Save" Text="Save" ></ToolbarItem>  
    </ContentPage.ToolbarItems>

    <ContentPage.Content>

        <TableView Intent="Form">
            <TableRoot>
                <TableSection Title="Details">
                    <EntryCell Label="Name" Placeholder="Entry your name" />
                    <EntryCell Label="Age" Placeholder="Entry your age" />
                </TableSection>
            </TableRoot>
        </TableView>

    </ContentPage.Content>

</ContentPage>

在之前的屏幕中,使用Code-behind打开模态框。

async Task OpenModal()
{
    var page = new NavigationPage(new MyModalView ());
    await App.Current.Navigation.PushModalAsync (page);
}
2个回答

6
完成您的请求的标准惯例是推送一个模态框并使用ToolBarItems。您可以在Xamarin论坛上找到将ToolBarItem应用于您的页面的示例。
如果您需要更具体的示例,请告诉我。

更新并附有示例

这两个工具栏项看起来会像这样:

var cancelItem = new ToolbarItem
{
    Text = "Cancel"
};

var doneItem = new ToolbarItem
{
    Text = "Done"
};

现在你可以将这些添加到你的视图中:
this.ToolbarItems.Add(cancelItem);
this.ToolbarItems.Add(doneItem);

你甚至可以绑定CommandProperty:

doneItem.SetBinding(MenuItem.CommandProperty, "DoneClicked");

或者当用户点击该项时,简单地处理事件:

doneItem.Clicked += (object sender, System.EventArgs e) => 
{
    // Perform action
};

记得将你的Modal包装在NavigationPage中,否则工具栏项将不会出现。

希望这能帮到你。


只是一个快速的问题,@gjfonte:您是否需要关于Xaml或Code behind(C#)的帮助?如果您在问题中更清楚地说明了这一点,而不仅仅是标记“xaml”,那就太好了。另外,只是一个小提示:如果您的Modal没有包含在NavigationPage中,您的ToolbarItems将不会显示: https://dev59.com/XF8d5IYBdhLWcg3wlzH6#26651140 - Demitrian
感谢David提供的笔记和建议。我已经编辑了我的问题,包括View的示例。 现在我该如何将“取消”按钮移到左侧? - gjfonte
@gjfonte 很遗憾,Xamarin目前不支持此功能,但许多人在论坛上抱怨,希望我们能在即将推出的Forms版本中看到改变。目前唯一要做的就是制作自定义渲染器,正如上面的讨论中也建议的那样。祝好运! - Demitrian
我会看一下,但我已经快完成了,我只需要改动一些代码。谢谢你的帮助! - gjfonte
@Demitrian 如何在代码后台设置工具栏项的背景颜色。 - Parth Savadiya
显示剩余3条评论

1
在进行导航推送的页面的构造函数中执行以下操作。这将适用于所有推送到堆栈上的页面。
NavigationPage.SetBackButtonTitle(this, "Cancel");

这是ContentPage(或任何类型的页面),当然。

我正在构造函数中包含此代码,但它不起作用。 我的视图构造函数仅包含bindingContext、您的代码和InitializeComponent()。您还有其他想法吗? 我在Xamarin Form中读到了一些内容,似乎不可能... - gjfonte

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