自定义导航栏使用Xamarin表格,棱镜损坏

时间:2017-11-15 13:45:59

标签: xamarin xamarin.forms prism

我使用Prism Library进行Xamarin.Forms。

我将通过Control模板创建自定义导航栏。 (创建自定义导航栏的原因 - 我没有找到使导航栏对显示背景图像透明的解决方案,我也可能会自定义导航栏并在其上添加一些控件)。

<ControlTemplate x:Key="NavigationPageTemplate">
    <AbsoluteLayout BackgroundColor="Transparent">

        <Image AbsoluteLayout.LayoutBounds="0,0,1,1"
               AbsoluteLayout.LayoutFlags="All"
               Aspect="AspectFill"
               Source="{TemplateBinding BackgroundImageEx}" />

        <ContentView Padding="0,50,0,0"
                     AbsoluteLayout.LayoutBounds="0,0,1,1"
                     AbsoluteLayout.LayoutFlags="All">
            <ContentPresenter />
        </ContentView>

        <!--Navigation bar started here -->
        <ContentView AbsoluteLayout.LayoutBounds="0,0,1,AutoSize"
                     AbsoluteLayout.LayoutFlags="PositionProportional, WidthProportional"
                     BackgroundColor="Transparent">
            <ContentView.Padding>
                <OnPlatform x:TypeArguments="Thickness"
                            Android="10"
                            iOS="10, 20, 10, 0" />
            </ContentView.Padding>

            <controls:ImageButton Command="{TemplateBinding GoBackCommand}"
                                  HeightRequest="30"
                                  HorizontalOptions="StartAndExpand"
                                  Source="ic_back.png"
                                  WidthRequest="30">

            </controls:ImageButton>

        </ContentView>
    </AbsoluteLayout>
</ControlTemplate>

我的问题是使用Prism Navigation处理后退按钮。 我试图点击MyApp.xaml.cs文件。

private void Button_OnClicked(object sender, EventArgs e)
{
    NavigationService.GoBackAsync();
}

它似乎有不同的导航堆栈,因为它显示在按下我的第一页之后。

我用这种方式导航:

Navigate("FirstPage"); - &gt; Navigate(MasterDetail/NavigationPage/ViewA) - &gt; Navigate("ViewB") ViewB - 使用控制模板。

当我单击ViewB NavigationService上的自定义后退按钮时,请回到FirstPage。这对我来说不对。我应该回到ViewA!

另一个问题当我们更改App.MainPage时,首页应该保存吗?

2 个答案:

答案 0 :(得分:0)

要从ViewA导航回FirstPage,您可以拦截后退事件,如果从ViewB页面传递具有特定值的变量,则返回该事件。代码示例:

发信人:

var navigationParams = new NavigationParameters();
navigationParams.Add("yourVariableName", "YourVariableValue");
_navigationService.GoBackAsync(navigationParams);

接收器:

public void OnNavigatedTo(NavigationParameters parameters)
        {
  string myVar = null;
            if (parameters.ContainsKey("yourVariableName"))
            {
                myVar = (string)parameters["yourVariableName"];
            }
  if(myVar=="YourVariableValue"){
     NavigationService.GoBackAsync();
  }
}

我不明白你的第二个问题。

答案 1 :(得分:0)

请参阅https://github.com/PrismLibrary/Prism/issues/1262

上对所述问题的讨论