奇数背堆栈行为

时间:2016-02-28 18:04:35

标签: c# gridview winrt-xaml template10

我正在使用Template10启动一个新的Windows 10通用应用程序。我添加了一个GridView项,其中包含几个项目,其中包含另一个Type Page的属性,可以导航到。

我创建了一个新的View并添加了一个标题,如下所示:

<controls:PageHeader x:Name="PageHeader" Text="Payees">
<!--  place stretched, across top  -->
    <RelativePanel.AlignTopWithPanel>True</RelativePanel.AlignTopWithPanel>
    <RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
    <RelativePanel.AlignLeftWithPanel>True</RelativePanel.AlignLeftWithPanel>
    <!--  secondary commands  -->
    <!--<controls:PageHeader.SecondaryCommands>

    </controls:PageHeader.SecondaryCommands>-->
</controls:PageHeader>

我已将行为附加到ItemClick,如下所示:

public void GridViewItemClick(object sender, object parameter)
{
    var arg = parameter as Windows.UI.Xaml.Controls.ItemClickEventArgs;

    var item = arg?.ClickedItem as AppPage;
    if (item?.TargetPage != null) NavigationService.Navigate(item.TargetPage);
}

导航到新页面工作正常,但由于某些原因,标题中没有其他页面中的后退按钮。如果我切换到使用shell后退按钮,那么它将让我从新页面导航回来。

我更改了网格项以导航到现有的SettingsPage作为测试,后面的按钮位于标题中。但是,如果我多次导航到设置页面,它会在后台堆栈上添加一个新实例。例如,我第一次导航,然后单击一次,我在主页面上。如果我再次进入设置(通过GridView),然后我再单击两次以返回主页等。

如果我使用默认的“...”菜单导航到设置页面并转到其中一个设置页面,则后端堆栈的行为与预期一致。我不能完全确定我做错了什么,因为这里没有什么花哨的东西。

修改

我已确定此行为对于从GridView导航是唯一的。我创建了一个导航到我新创建的页面的测试Button,后面的堆栈按预期运行,除非我只有一个后退箭头,如果我启用了“使用shell后退按钮”设置。

以下是XAML中附加行为的内容,如果它有任何帮助:

<GridView x:Name="MainGridView"
          IsItemClickEnabled="True"
          ItemsSource="{Binding AppPages}">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="ItemClick">
            <core:CallMethodAction MethodName="GridViewItemClick" TargetObject="{Binding Mode=OneWay}" />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
....
</GridView>

1 个答案:

答案 0 :(得分:1)

您需要标题中的框架。

byte[] byteArray = null;
using (var fs = new FileStream(excelFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    int numBytesToRead = Convert.ToInt32(fs.Length);
    byteArray = new byte[numBytesToRead];
    fs.Read(byteArray, 0, numBytesToRead);
}
using (MemoryStream mem = new MemoryStream()) {
    mem.Write(byteArray, 0, byteArray.Length);
    XLWorkbook wb = new XLWorkbook(mem);
    ...
}