--- /dev/null
+using System;
+
+using Xamarin.Forms.CustomAttributes;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Bugzilla, 40185, "[UWP] ContentPage does not have proper right bounds in landscape", PlatformAffected.WinRT)]
+ public class Bugzilla40185 : TestContentPage
+ {
+ protected override void Init()
+ {
+ Content = new StackLayout
+ {
+ VerticalOptions = LayoutOptions.Center,
+ Children =
+ {
+ new Button
+ {
+ Text = "Switch Main Page",
+ Command = new Command(SwitchMainPage)
+ }
+ }
+ };
+ }
+
+ void SwitchMainPage()
+ {
+ Application.Current.MainPage = new ContentPage
+ {
+ BackgroundColor = Color.White,
+ Content = new Label
+ {
+ Text = "This text should be in bounds in landscape mode.",
+ HorizontalTextAlignment = TextAlignment.End,
+ VerticalTextAlignment = TextAlignment.Center,
+ TextColor = Color.Black
+ }
+ };
+ }
+ }
+}
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla39702.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla40173.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla39821.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40185.cs" />
<Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" />
using System.Linq;
using System.Threading.Tasks;
+using Windows.ApplicationModel.Core;
using Windows.UI;
using Windows.UI.Popups;
using Windows.UI.Xaml;
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;
_bounds = new Rectangle(0, 0, _page.ActualWidth - (landscape ? offset : 0), _page.ActualHeight - (landscape ? 0 : offset));
+
+ // Even if the MainPage is a ContentPage not inside of a NavigationPage, the calculated bounds
+ // assume the TitleBar is there even if it isn't visible. When UpdatePageSizes is called,
+ // _container.ActualWidth is correct because it's aware that the TitleBar isn't there, but the
+ // bounds aren't, and things can subsequently run under the StatusBar.
+ if (!titleBar)
+ {
+ _bounds.Width -= (_bounds.Width - _container.ActualWidth);
+ }
}
#endif
}