зеркало из 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"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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>
|
||||
|
|
|
@ -7,6 +7,9 @@ using Windows.ApplicationModel;
|
|||
using Windows.ApplicationModel.Activation;
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Foundation.Metadata;
|
||||
using Windows.UI;
|
||||
using Windows.UI.ViewManagement;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
|
@ -76,8 +79,21 @@ namespace Xamarin.Forms.ControlGallery.WindowsUniversal
|
|||
// parameter
|
||||
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
||||
}
|
||||
// Ensure the current window is active
|
||||
Window.Current.Activate();
|
||||
|
||||
//// 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
|
||||
Window.Current.Activate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -193,6 +193,11 @@
|
|||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</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' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
|
|
|
@ -32,6 +32,10 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
{
|
||||
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)
|
||||
{
|
||||
return (IVisualElementRenderer)element.GetValue(RendererProperty);
|
||||
|
@ -79,13 +83,26 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
|
||||
UpdateBounds();
|
||||
|
||||
|
||||
#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.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
|
||||
}
|
||||
|
@ -420,10 +437,9 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
{
|
||||
_bounds = new Rectangle(0, 0, _page.ActualWidth, _page.ActualHeight);
|
||||
#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 titleBar = CoreApplication.GetCurrentView().TitleBar.IsVisible;
|
||||
double offset = landscape ? statusBar.OccludedRect.Width : statusBar.OccludedRect.Height;
|
||||
|
|
Загрузка…
Ссылка в новой задаче