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)); }