summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs
diff options
context:
space:
mode:
authorJason Smith <jason.smith@xamarin.com>2016-03-22 13:02:25 -0700
committerJason Smith <jason.smith@xamarin.com>2016-03-22 16:13:41 -0700
commit17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch)
treeb5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs
downloadxamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip
Initial import
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs')
-rw-r--r--Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs b/Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs
new file mode 100644
index 00000000..aa82f56d
--- /dev/null
+++ b/Xamarin.Forms.Platform.WinRT/MasterBackgroundConverter.cs
@@ -0,0 +1,75 @@
+using System;
+using Windows.UI;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Media;
+
+#if WINDOWS_UWP
+
+namespace Xamarin.Forms.Platform.UWP
+#else
+
+namespace Xamarin.Forms.Platform.WinRT
+#endif
+{
+ public class MasterBackgroundConverter : Windows.UI.Xaml.Data.IValueConverter
+ {
+ // Obtained by comparing the Mail apps master section background to the detail background
+ const double Shift = 0.03;
+
+ public object Convert(object value, Type targetType, object parameter, string language)
+ {
+ SolidColorBrush brush = null;
+
+ var element = value as FrameworkElement;
+ if (element != null)
+ {
+ while (brush == null && element != null)
+ {
+ DependencyProperty property = GetBackgroundProperty(element);
+ if (property != null)
+ {
+ value = element.GetValue(property);
+ brush = value as SolidColorBrush;
+ if (brush != null && brush.Color == Colors.Transparent)
+ brush = null;
+ }
+
+ element = VisualTreeHelper.GetParent(element) as FrameworkElement;
+ }
+ }
+
+ brush = value as SolidColorBrush;
+ if (brush != null)
+ {
+ Windows.UI.Color wcolor = brush.Color;
+ Color color = Color.FromRgba(wcolor.R, wcolor.G, wcolor.B, wcolor.A);
+
+ double delta = Shift;
+ if (color.Luminosity > .6)
+ delta = -Shift;
+
+ color = color.AddLuminosity(delta);
+
+ return new SolidColorBrush(color.ToWindowsColor());
+ }
+
+ return null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, string language)
+ {
+ throw new NotImplementedException();
+ }
+
+ static DependencyProperty GetBackgroundProperty(FrameworkElement element)
+ {
+ if (element is Control)
+ return Control.BackgroundProperty;
+ if (element is Panel)
+ return Panel.BackgroundProperty;
+
+ return null;
+ }
+ }
+} \ No newline at end of file