public class OverlappingAppBarBehavior: Behavior { private static readonly double _appBarOffset = 74.0; private static readonly double _reducedAppBarOffset = 70.0; private static readonly double _appBarOpacity = 0.99; private static readonly IDictionary _pageMargins = new Dictionary { {PageOrientation.PortraitUp, new Thickness(0.0, 0.0, 0.0, _appBarOffset)}, {PageOrientation.PortraitDown, new Thickness(0.0, _appBarOffset, 0.0, 0.0)}, {PageOrientation.LandscapeLeft, new Thickness(0.0, 0.0, _reducedAppBarOffset, 0.0)}, {PageOrientation.LandscapeRight, new Thickness(_appBarOffset, 0.0, 0.0, 0.0)} }; protected override void OnAttached() { AssociatedObject.Loaded += OnLoaded; AssociatedObject.OrientationChanged += OnOrientationChanged; } private void OnLoaded(object sender, RoutedEventArgs e) { AssociatedObject.Loaded -= OnLoaded; UpdateAppBarState(); } private void OnOrientationChanged(object sender, OrientationChangedEventArgs e) { UpdateAppBarState(); } private void UpdateAppBarState() { var appBar = AssociatedObject.ApplicationBar; if (appBar == null) { return; } appBar.Opacity = _appBarOpacity; var content = AssociatedObject.Content as FrameworkElement; if (content == null) { return; } Thickness margin; AssociatedObject.Margin = _pageMargins.TryGetValue(AssociatedObject.Orientation, out margin) ? margin : new Thickness(0); } }