C# 在WP 8.1通用应用程序中旋转重叠的其他元素(并自动更改边距)

C# 在WP 8.1通用应用程序中旋转重叠的其他元素(并自动更改边距),c#,.net,winrt-xaml,windows-phone-8.1,C#,.net,Winrt Xaml,Windows Phone 8.1,以下XAML显示Windows Phone 8.1通用应用程序页面的内容。这个想法是在枢轴的顶部有一个酒吧。但轴与条重叠,而蓝色的示例栅格按预期工作 <Grid> <Grid.RowDefinitions> <RowDefinition Height="50" /> <RowDefinition Height="*" /> </Grid.RowDefinitions>

以下XAML显示Windows Phone 8.1通用应用程序页面的内容。这个想法是在枢轴的顶部有一个酒吧。但轴与条重叠,而蓝色的示例栅格按预期工作

<Grid>        
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Grid Background="{StaticResource PhoneAccentBrush}" Height="50" />
    <Pivot Grid.Row="1" Background="Green" Width="200" HorizontalAlignment="Left" />
    <Grid Grid.Row="1" Background="Blue" Width="200" HorizontalAlignment="Right" />
</Grid>

生成的页面如下所示:

这个“负边际”从何而来

如何避免呢

顺便说一句:仅仅设置边距并不是一个解决方案,因为它会带来其他问题,例如,当使用SemanticZoom控件时,GUI会出现跳跃,我需要知道问题的根本原因才能解决它


信息:Windows Phone Pivot似乎会根据当前屏幕设置(显示/隐藏状态栏)自动更改边距。因此,如果你的应用程序在某些情况下更改了状态栏的状态,你最终将拥有一个跳跃/更改轴心控制

覆盖控件模板似乎不起作用;控件中有一些代码用于在构建后设置边距。此外,在加载的事件上设置有问题的网格上的边距也不起作用,负边距代码在此之后运行

我发现唯一能消除这种奇怪行为的方法是让你的UI与状态栏重叠:

ApplicationView.GetForCurrentView()
  .SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);

然后,Pivot控件显示它不需要尝试覆盖状态栏。请注意,您现在必须在页面布局中留出空间,以防止与状态栏重叠。

我找到了一个解决方案,并为Pivot控件创建了一个简单的附加属性

可以通过以下方式使用附加属性:

<Pivot controls:PivotExtensions.DisableAutoMargin="True">
    <PivotItem Header="A">
        ...
    </PivotItem>
    <PivotItem Header="B">
        ...
    </PivotItem>
</Pivot>

...
...
可以在此处找到具有附加属性的类:


缺点:您不能再覆盖模板,因为附加属性已更改模板…

在默认透视样式中-添加了26个上边距,不知道为什么,但似乎要覆盖所有屏幕区域,包括通知区域。要解决这个问题,您需要编辑默认的透视样式。奇怪的是,当透视项中有SemanticZoom控件时,当SemanticZoom切换到缩小视图时,此边距将被删除。。。哦,微软,为什么!?你认为这是一个错误吗?我有一个覆盖样式的解决方案。。。我知道了,我会尽快寄出去的。重写控件模板时,删除
x:Name=“RootElement”
是使其工作的特殊方法。它必须按名称查找该元素,然后再修改边距。虽然我的应用程序已经设置了
ApplicationViewBoundsMode.UseCoreWindow
,所以我不需要这样做。