зеркало из https://github.com/DeGsoft/maui-linux.git
[UWP] Explicitly set mobile StatusBar colors to white Background/black Foreground on Light theme (#491)
* [UWP] Encapsulate MobileStatusBar * [UWP] Set StatusBar colors on Light theme * Add test code to override status bar color
This commit is contained in:
Родитель
6bc6ee5c71
Коммит
0cc2fd2b67
|
@ -2,7 +2,8 @@
|
||||||
x:Class="Xamarin.Forms.ControlGallery.WindowsUniversal.App"
|
x:Class="Xamarin.Forms.ControlGallery.WindowsUniversal.App"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="using:Xamarin.Forms.ControlGallery.WindowsUniversal">
|
xmlns:local="using:Xamarin.Forms.ControlGallery.WindowsUniversal"
|
||||||
|
RequestedTheme="Light">
|
||||||
|
|
||||||
|
|
||||||
</Application>
|
</Application>
|
||||||
|
|
|
@ -7,6 +7,9 @@ using Windows.ApplicationModel;
|
||||||
using Windows.ApplicationModel.Activation;
|
using Windows.ApplicationModel.Activation;
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
using Windows.Foundation.Collections;
|
using Windows.Foundation.Collections;
|
||||||
|
using Windows.Foundation.Metadata;
|
||||||
|
using Windows.UI;
|
||||||
|
using Windows.UI.ViewManagement;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
using Windows.UI.Xaml.Controls.Primitives;
|
||||||
|
@ -76,6 +79,19 @@ namespace Xamarin.Forms.ControlGallery.WindowsUniversal
|
||||||
// parameter
|
// parameter
|
||||||
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// Uncomment to test overriding the status bar color
|
||||||
|
//if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
|
||||||
|
//{
|
||||||
|
// var statusBar = StatusBar.GetForCurrentView();
|
||||||
|
// if (statusBar != null)
|
||||||
|
// {
|
||||||
|
// statusBar.BackgroundOpacity = 1;
|
||||||
|
// statusBar.BackgroundColor = Colors.Black;
|
||||||
|
// statusBar.ForegroundColor = Colors.White;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
// Ensure the current window is active
|
// Ensure the current window is active
|
||||||
Window.Current.Activate();
|
Window.Current.Activate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,6 +193,11 @@
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<SDKReference Include="WindowsMobile, Version=10.0.10586.0">
|
||||||
|
<Name>Windows Mobile Extensions for the UWP</Name>
|
||||||
|
</SDKReference>
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -32,6 +32,10 @@ namespace Xamarin.Forms.Platform.WinRT
|
||||||
{
|
{
|
||||||
internal static readonly BindableProperty RendererProperty = BindableProperty.CreateAttached("Renderer", typeof(IVisualElementRenderer), typeof(Platform), default(IVisualElementRenderer));
|
internal static readonly BindableProperty RendererProperty = BindableProperty.CreateAttached("Renderer", typeof(IVisualElementRenderer), typeof(Platform), default(IVisualElementRenderer));
|
||||||
|
|
||||||
|
#if WINDOWS_UWP
|
||||||
|
internal static StatusBar MobileStatusBar => ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar") ? StatusBar.GetForCurrentView() : null;
|
||||||
|
#endif
|
||||||
|
|
||||||
public static IVisualElementRenderer GetRenderer(VisualElement element)
|
public static IVisualElementRenderer GetRenderer(VisualElement element)
|
||||||
{
|
{
|
||||||
return (IVisualElementRenderer)element.GetValue(RendererProperty);
|
return (IVisualElementRenderer)element.GetValue(RendererProperty);
|
||||||
|
@ -79,13 +83,26 @@ namespace Xamarin.Forms.Platform.WinRT
|
||||||
|
|
||||||
UpdateBounds();
|
UpdateBounds();
|
||||||
|
|
||||||
|
|
||||||
#if WINDOWS_UWP
|
#if WINDOWS_UWP
|
||||||
if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
|
StatusBar statusBar = MobileStatusBar;
|
||||||
|
if (statusBar != null)
|
||||||
{
|
{
|
||||||
StatusBar statusBar = StatusBar.GetForCurrentView();
|
|
||||||
statusBar.Showing += (sender, args) => UpdateBounds();
|
statusBar.Showing += (sender, args) => UpdateBounds();
|
||||||
statusBar.Hiding += (sender, args) => UpdateBounds();
|
statusBar.Hiding += (sender, args) => UpdateBounds();
|
||||||
|
|
||||||
|
// UWP 14393 Bug: If RequestedTheme is Light (which it is by default), then the
|
||||||
|
// status bar uses White Foreground with White Background.
|
||||||
|
// UWP 10586 Bug: If RequestedTheme is Light (which it is by default), then the
|
||||||
|
// status bar uses Black Foreground with Black Background.
|
||||||
|
// Since the Light theme should have a Black on White status bar, we will set it explicitly.
|
||||||
|
// This can be overriden by setting the status bar colors in App.xaml.cs OnLaunched.
|
||||||
|
|
||||||
|
if (statusBar.BackgroundColor == null && statusBar.ForegroundColor == null && Windows.UI.Xaml.Application.Current.RequestedTheme == ApplicationTheme.Light)
|
||||||
|
{
|
||||||
|
statusBar.BackgroundColor = Colors.White;
|
||||||
|
statusBar.ForegroundColor = Colors.Black;
|
||||||
|
statusBar.BackgroundOpacity = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -420,10 +437,9 @@ namespace Xamarin.Forms.Platform.WinRT
|
||||||
{
|
{
|
||||||
_bounds = new Rectangle(0, 0, _page.ActualWidth, _page.ActualHeight);
|
_bounds = new Rectangle(0, 0, _page.ActualWidth, _page.ActualHeight);
|
||||||
#if WINDOWS_UWP
|
#if WINDOWS_UWP
|
||||||
if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
|
StatusBar statusBar = MobileStatusBar;
|
||||||
|
if (statusBar != null)
|
||||||
{
|
{
|
||||||
StatusBar statusBar = StatusBar.GetForCurrentView();
|
|
||||||
|
|
||||||
bool landscape = Device.Info.CurrentOrientation.IsLandscape();
|
bool landscape = Device.Info.CurrentOrientation.IsLandscape();
|
||||||
bool titleBar = CoreApplication.GetCurrentView().TitleBar.IsVisible;
|
bool titleBar = CoreApplication.GetCurrentView().TitleBar.IsVisible;
|
||||||
double offset = landscape ? statusBar.OccludedRect.Width : statusBar.OccludedRect.Height;
|
double offset = landscape ? statusBar.OccludedRect.Width : statusBar.OccludedRect.Height;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче