简体   繁体   English

Windows Phone应用程序栏隐藏页面内容

[英]Windows Phone application bar hides page content

I'm experimenting with Windows Phone 8 development and have hacked together a little app from examples here and there. 我正在尝试Windows Phone 8的开发,并且从这里和那里的示例中窃取了一个小应用程序。 However, I have stumbled upon a problem which I'm kind of stuck with: When I add an application bar to a page (either in XAML or in C#), it hides the bottom part of the content with no ability to scroll down either. 但是,我偶然发现了一个困扰不已的问题:当我向页面中添加应用程序栏(在XAML或C#中)时,它隐藏了内容的底部,或者无法向下滚动。

My XAML is: 我的XAML是:

<phone:PhoneApplicationPage
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
xmlns:maptk="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
x:Class="MyApp.MainPage"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent" ScrollViewer.VerticalScrollBarVisibility="Auto">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
        <TextBlock x:Name="appNameText" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

        <maps:Map x:Name="locationMap" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="446" Height="347">
            <maptk:MapExtensions.Children>
                <maptk:Pushpin Name="MyLocation" Visibility="Collapsed" />
            </maptk:MapExtensions.Children>
        </maps:Map>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="165,362,0,0" VerticalAlignment="Top" Width="291" />
        <TextBlock x:Name="longitudeText" HorizontalAlignment="Left" Margin="338,462,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Text="longitude placeholder"/>
        <TextBlock x:Name="latitudeText" HorizontalAlignment="Left" Margin="338,507,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Text="latitude placeholder"/>

        <toolkit:ToggleSwitch x:Name="switch1" IsChecked="True" Content="First switch" Margin="165,424,24,76"/>
        <toolkit:ToggleSwitch x:Name="switch2" Margin="114,482,24,10" Content="Second switch" IsChecked="True"/>

    </Grid>

</Grid>

And the code that creates the app bar: 以及创建应用栏的代码:

        //    // Set the page's ApplicationBar to a new instance of ApplicationBar.
        ApplicationBar = new ApplicationBar();

    //    // Create a new button and set the text value to the localized string from AppResources.
        ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
        appBarButton.Text = AppResources.AppBarButtonText;
        appBarButton.Click += appBarButton_Click;
        ApplicationBar.Buttons.Add(appBarButton);

    //    // Create a new menu item with the localized string from AppResources.
        ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
        ApplicationBar.MenuItems.Add(appBarMenuItem);

The result without the app bar: 没有应用栏的结果: 没有应用栏

and with the app bar added: 并添加了应用栏: 带有应用栏

Notice the missing labels for the switches. 请注意缺少交换机的标签。 (Actually, the bottom switch itself was hidden too, but it looks as if mindlessly fiddling around "fixed" it. (实际上,底部开关本身也被隐藏了,但是看起来好像是在漫不经心地摆弄了“固定”开关。

So, long question short: could somebody please point out what the heck I'm doing wrong for such anomalies to appear? 所以,长话短说:有人可以指出出现这种异常的原因是我做错了什么吗?

Pages do not automatically contain a ScrollViewer, so you need to add one around the elements that you want to be scrollable (in your case, I guess that means around the LayoutRoot grid). 页面不会自动包含ScrollViewer,因此您需要在要滚动的元素周围添加一个(在您的情况下,我认为这意味着在LayoutRoot网格周围)。

ScrollViewer.VerticalScrollBarVisibility="Auto" is something that a ScrollViewer would use to determine whether to be visible or not, but since there is no ScrollViewer at all, that does nothing. ScrollViewer.VerticalScrollBarVisibility="Auto"是ScrollViewer用于确定是否可见的东西,但是由于根本没有ScrollViewer,所以它什么也不做。 (This is an attached property, much like Grid.Row for example, which is only useful if the element is in a Grid.) (这是一个附加属性,例如,类似于Grid.Row,仅当元素位于Grid中时才有用。)

There's only one case (that I know of) in which the app bar is actually in front of the page: when the AppBar's Opacity is not 100%. 在我所知的情况下,只有一种情况是应用程序栏实际上位于页面的前面:当AppBar的不透明度不是100%时。 In this case, the Page actually goes behind it, so you have to manage what/where/how is visible yourself. 在这种情况下,页面实际上位于页面后面,因此您必须自己管理可见的位置/位置/方式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM