public object Convert(object[] rpValues, Type rpTargetType, object rpParameter, CultureInfo rpCulture)
            {
                object rResult;

                if (!IsAutoRotationSupported)
                    rResult = rpValues[1];
                else
                {
                    ScreenOrientation rOrientation;

                    if (rpValues[0] != DependencyProperty.UnsetValue)
                        rOrientation = (ScreenOrientation)rpValues[0];
                    else
                    {
                        var rObject = rpValues[3] as DependencyObject;
                        var rMonitor = NativeMethods.User32.MonitorFromWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle, NativeConstants.MFW.MONITOR_DEFAULTTONEAREST);
                        var rInfo = new NativeStructs.MONITORINFO() { cbSize = Marshal.SizeOf(typeof(NativeStructs.MONITORINFO)) };
                        NativeMethods.User32.GetMonitorInfo(rMonitor, ref rInfo);

                        var rWidth = rInfo.rcMonitor.Width;
                        var rHeight = rInfo.rcMonitor.Height;

                        rOrientation = rWidth > rHeight ? ScreenOrientation.Landscape : ScreenOrientation.Portrait;
                    }

                    rResult = rOrientation == ScreenOrientation.Landscape ? rpValues[1] : rpValues[2];
                }

                var rConverter = rpParameter as Tuple<IValueConverter, object>;
                return rConverter == null ? rResult : rConverter.Item1.Convert(rResult, rpTargetType, rConverter.Item2, rpCulture);
            }
            public object Convert(object[] rpValues, Type rpTargetType, object rpParameter, CultureInfo rpCulture)
            {
                object rResult;

                if (!IsAutoRotationSupported)
                {
                    rResult = rpValues[1];
                }
                else
                {
                    ScreenOrientation rOrientation;

                    if (rpValues[0] != DependencyProperty.UnsetValue)
                    {
                        rOrientation = (ScreenOrientation)rpValues[0];
                    }
                    else
                    {
                        var rObject  = rpValues[3] as DependencyObject;
                        var rMonitor = NativeMethods.User32.MonitorFromWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle, NativeConstants.MFW.MONITOR_DEFAULTTONEAREST);
                        var rInfo    = new NativeStructs.MONITORINFO()
                        {
                            cbSize = Marshal.SizeOf(typeof(NativeStructs.MONITORINFO))
                        };
                        NativeMethods.User32.GetMonitorInfo(rMonitor, ref rInfo);

                        var rWidth  = rInfo.rcMonitor.Width;
                        var rHeight = rInfo.rcMonitor.Height;

                        rOrientation = rWidth > rHeight ? ScreenOrientation.Landscape : ScreenOrientation.Portrait;
                    }

                    rResult = rOrientation == ScreenOrientation.Landscape ? rpValues[1] : rpValues[2];
                }

                var rConverter = rpParameter as Tuple <IValueConverter, object>;

                return(rConverter == null ? rResult : rConverter.Item1.Convert(rResult, rpTargetType, rConverter.Item2, rpCulture));
            }