Xamarin.Forms UWP 项目中标题栏和选项卡之间的空白 space
Irritating blank space between Title Bar and Tabs in Xamarin.Forms UWP project
我几乎是 Xamarin.Forms 的新手,我正在开发一个相当简单的 cross-platform 应用程序。该应用程序在 Android 中显示效果很好,但在 UWP 中有一个愚蠢的空白 space。该项目由一个 TabbedPage 组成,其中有 4 个 NavigationPages,以便在其中推送和弹出页面。
在深入了解 UWP 平台细节后,我能够更改选项卡的样式。我一直在寻找 3 天的解决方案,这让我发疯。到目前为止,我找到的唯一解决方案(在 VS 2015 的 Live Visual Tree 的帮助下)是将 Visibility 属性 更改为 "Collapsed" 来自 CommandBar(如第 3 张照片所示)。但这不是解决方案,因为它只会在运行时消失。
有人可以帮忙吗?
提前致谢。
Android View, UWP View, Live Visual Tree
编辑:
我的 MainPage.xaml 代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:_TIF_Xamarin;assembly=_TIF_Xamarin"
x:Class="_TIF_Xamarin.MainPage">
<!--4 different tabs, which also are Navigation Pages-->
<NavigationPage Title="Home">
<x:Arguments>
<local:HomePage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="Exhibitor">
<x:Arguments>
<local:ExhibitorsPage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="Exhibits">
<x:Arguments>
<local:ExhibitsPage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="More">
<x:Arguments>
<local:MorePage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
您需要创建自定义 TabbedPage
,然后为其创建 UWP 渲染器。
首先你在 PCL 中创建一个 CustomTabbedPage
:
public class CustomTabbedPage : TabbedPage { }
在您的 XAML 中,使用此 CustomTabbedPage
而不是 TabbedPage
。所有行为和 UI 在所有平台上都将保持不变。
现在您在 UWP 项目中创建渲染器:
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace App.UWP
{
public class CustomTabbedPageRenderer : TabbedPageRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
Control.TitleVisibility = Windows.UI.Xaml.Visibility.Collapsed;
}
}
}
我们使用FormsPivot.TitleVisibility
来隐藏Title
区域。
我几乎是 Xamarin.Forms 的新手,我正在开发一个相当简单的 cross-platform 应用程序。该应用程序在 Android 中显示效果很好,但在 UWP 中有一个愚蠢的空白 space。该项目由一个 TabbedPage 组成,其中有 4 个 NavigationPages,以便在其中推送和弹出页面。
在深入了解 UWP 平台细节后,我能够更改选项卡的样式。我一直在寻找 3 天的解决方案,这让我发疯。到目前为止,我找到的唯一解决方案(在 VS 2015 的 Live Visual Tree 的帮助下)是将 Visibility 属性 更改为 "Collapsed" 来自 CommandBar(如第 3 张照片所示)。但这不是解决方案,因为它只会在运行时消失。
有人可以帮忙吗? 提前致谢。
Android View, UWP View, Live Visual Tree
编辑: 我的 MainPage.xaml 代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:_TIF_Xamarin;assembly=_TIF_Xamarin"
x:Class="_TIF_Xamarin.MainPage">
<!--4 different tabs, which also are Navigation Pages-->
<NavigationPage Title="Home">
<x:Arguments>
<local:HomePage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="Exhibitor">
<x:Arguments>
<local:ExhibitorsPage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="Exhibits">
<x:Arguments>
<local:ExhibitsPage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="More">
<x:Arguments>
<local:MorePage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
您需要创建自定义 TabbedPage
,然后为其创建 UWP 渲染器。
首先你在 PCL 中创建一个 CustomTabbedPage
:
public class CustomTabbedPage : TabbedPage { }
在您的 XAML 中,使用此 CustomTabbedPage
而不是 TabbedPage
。所有行为和 UI 在所有平台上都将保持不变。
现在您在 UWP 项目中创建渲染器:
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace App.UWP
{
public class CustomTabbedPageRenderer : TabbedPageRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
Control.TitleVisibility = Windows.UI.Xaml.Visibility.Collapsed;
}
}
}
我们使用FormsPivot.TitleVisibility
来隐藏Title
区域。