diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT.Phone/WindowsPhoneResourcesProvider.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT.Phone/WindowsPhoneResourcesProvider.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT.Phone/WindowsPhoneResourcesProvider.cs b/Xamarin.Forms.Platform.WinRT.Phone/WindowsPhoneResourcesProvider.cs new file mode 100644 index 00000000..a4ae4e94 --- /dev/null +++ b/Xamarin.Forms.Platform.WinRT.Phone/WindowsPhoneResourcesProvider.cs @@ -0,0 +1,72 @@ +using System; +using Windows.UI.Text; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace Xamarin.Forms.Platform.WinRT +{ + internal sealed class WindowsPhoneResourcesProvider + : ISystemResourcesProvider + { + public IResourceDictionary GetSystemResources() + { + var windowsResources = Windows.UI.Xaml.Application.Current.Resources; + + var resources = new ResourceDictionary (); + resources[Device.Styles.TitleStyleKey] = GetStyle ("HeaderTextBlockStyle"); + resources[Device.Styles.SubtitleStyleKey] = GetStyle ("SubheaderTextBlockStyle"); + resources[Device.Styles.BodyStyleKey] = GetStyle ("BodyTextBlockStyle"); + resources[Device.Styles.CaptionStyleKey] = GetStyle ("BodyTextBlockStyle"); + resources[Device.Styles.ListItemTextStyleKey] = GetStyle ("ListViewItemTextBlockStyle"); + resources[Device.Styles.ListItemDetailTextStyleKey] = GetStyle ("ListViewItemContentTextBlockStyle"); + return resources; + } + + Style GetStyle (object nativeKey) + { + var style = (Windows.UI.Xaml.Style) Windows.UI.Xaml.Application.Current.Resources[nativeKey]; + + var formsStyle = new Style (typeof (Label)); + foreach (var b in style.Setters) { + var setter = b as Windows.UI.Xaml.Setter; + if (setter == null) + continue; + + // TODO: Need to implement a stealth pass-through for things we don't support + + if (setter.Property == TextBlock.FontSizeProperty) + formsStyle.Setters.Add (Label.FontSizeProperty, setter.Value); + else if (setter.Property == TextBlock.FontFamilyProperty) + formsStyle.Setters.Add (Label.FontFamilyProperty, setter.Value); + else if (setter.Property == TextBlock.FontWeightProperty) + formsStyle.Setters.Add (Label.FontAttributesProperty, ToAttributes (Convert.ToUInt16 (setter.Value))); + else if (setter.Property == TextBlock.TextWrappingProperty) + formsStyle.Setters.Add (Label.LineBreakModeProperty, ToLineBreakMode ((TextWrapping) setter.Value)); + } + + return formsStyle; + } + + static LineBreakMode ToLineBreakMode (TextWrapping value) + { + switch (value) { + case TextWrapping.Wrap: + return LineBreakMode.CharacterWrap; + case TextWrapping.WrapWholeWords: + return LineBreakMode.WordWrap; + default: + case TextWrapping.NoWrap: + return LineBreakMode.NoWrap; + } + } + + static FontAttributes ToAttributes (ushort uweight) + { + if (uweight == FontWeights.Bold.Weight || uweight == FontWeights.SemiBold.Weight || uweight == FontWeights.ExtraBold.Weight) { + return FontAttributes.Bold; + } + + return FontAttributes.None; + } + } +}
\ No newline at end of file |