summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WP8
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-08-16 12:10:32 -0600
committerJason Smith <jason.smith@xamarin.com>2016-08-16 11:10:32 -0700
commit30c0dcb949186c21c60c4c9ddf8a581d40a43662 (patch)
tree17a196012b9d4044f78cc0acbe9aa137d10f2b25 /Xamarin.Forms.Platform.WP8
parent966683a807f68f302e8f121279387109f2a4a73b (diff)
downloadxamarin-forms-30c0dcb949186c21c60c4c9ddf8a581d40a43662.tar.gz
xamarin-forms-30c0dcb949186c21c60c4c9ddf8a581d40a43662.tar.bz2
xamarin-forms-30c0dcb949186c21c60c4c9ddf8a581d40a43662.zip
Fix Entry/SearchBar color issues (#306)
* Fix disappearing Entry text on UWP Anniversary Edition Fix background color reversion bug in UWP Phone Move SearchBar styling on UWP to its own file Make foreground/background color changes on UWP SearchBar/Entry consistent Fix SearchBar color toggle bug on WP8 * Temporarily moving SDK target to previous version * Fix build error on OSX
Diffstat (limited to 'Xamarin.Forms.Platform.WP8')
-rw-r--r--Xamarin.Forms.Platform.WP8/BrushHelpers.cs37
-rw-r--r--Xamarin.Forms.Platform.WP8/EntryRenderer.cs45
-rw-r--r--Xamarin.Forms.Platform.WP8/SearchBarRenderer.cs36
-rw-r--r--Xamarin.Forms.Platform.WP8/Xamarin.Forms.Platform.WP8.csproj1
4 files changed, 55 insertions, 64 deletions
diff --git a/Xamarin.Forms.Platform.WP8/BrushHelpers.cs b/Xamarin.Forms.Platform.WP8/BrushHelpers.cs
new file mode 100644
index 00000000..993b23f4
--- /dev/null
+++ b/Xamarin.Forms.Platform.WP8/BrushHelpers.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Windows.Media;
+
+namespace Xamarin.Forms.Platform.WinPhone
+{
+ internal static class BrushHelpers
+ {
+ /// <summary>
+ /// Handles the logic for setting a Xamarin.Forms Color for a Brush
+ /// while caching the original default brush
+ /// </summary>
+ /// <param name="color">The target Xamarin.Forms.Color</param>
+ /// <param name="defaultbrush">The renderer's cache for the default brush</param>
+ /// <param name="getter">Delegate for retrieving the Control's current Brush</param>
+ /// <param name="setter">Delegate for setting the Control's Brush</param>
+ public static void UpdateColor(Color color, ref Brush defaultbrush, Func<Brush> getter, Action<Brush> setter)
+ {
+ if (color.IsDefault)
+ {
+ if (defaultbrush == null)
+ {
+ return;
+ }
+
+ setter(defaultbrush);
+ return;
+ }
+
+ if (defaultbrush == null)
+ {
+ defaultbrush = getter();
+ }
+
+ setter(color.ToBrush());
+ }
+ }
+}
diff --git a/Xamarin.Forms.Platform.WP8/EntryRenderer.cs b/Xamarin.Forms.Platform.WP8/EntryRenderer.cs
index b2749c05..00fdbb4a 100644
--- a/Xamarin.Forms.Platform.WP8/EntryRenderer.cs
+++ b/Xamarin.Forms.Platform.WP8/EntryRenderer.cs
@@ -77,6 +77,7 @@ namespace Xamarin.Forms.Platform.WinPhone
bool _fontApplied;
bool _ignoreTextChange;
Brush _placeholderDefaultBrush;
+ Brush _textDefaultBrush;
public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
{
@@ -216,23 +217,12 @@ namespace Xamarin.Forms.Platform.WinPhone
if (Control == null)
return;
- Entry entry = Element;
- if (entry != null)
- {
- if (!IsNullOrEmpty(entry.Text))
- {
- if (!entry.TextColor.IsDefault)
- Control.Foreground = entry.TextColor.ToBrush();
- else
- Control.Foreground = (Brush)WControl.ForegroundProperty.GetMetadata(typeof(FormsPhoneTextBox)).DefaultValue;
-
- // Force the PhoneTextBox control to do some internal bookkeeping
- // so the colors change immediately and remain changed when the control gets focus
- Control.OnApplyTemplate();
- }
- }
- else
- Control.Foreground = (Brush)WControl.ForegroundProperty.GetMetadata(typeof(FormsPhoneTextBox)).DefaultValue;
+ BrushHelpers.UpdateColor(Element.TextColor, ref _textDefaultBrush,
+ () => Control.Foreground, brush => Control.Foreground = brush);
+
+ // Force the PhoneTextBox control to do some internal bookkeeping
+ // so the colors change immediately and remain changed when the control gets focus
+ Control.OnApplyTemplate();
}
void UpdateFont()
@@ -286,25 +276,8 @@ namespace Xamarin.Forms.Platform.WinPhone
void UpdatePlaceholderColor()
{
- Color placeholderColor = Element.PlaceholderColor;
-
- if (placeholderColor.IsDefault)
- {
- if (_placeholderDefaultBrush == null)
- return;
-
- // Use the cached default brush
- Control.PlaceholderForegroundBrush = _placeholderDefaultBrush;
- return;
- }
-
- if (_placeholderDefaultBrush == null)
- {
- // Cache the default brush in case we need to set the color back to default
- _placeholderDefaultBrush = Control.PlaceholderForegroundBrush;
- }
-
- Control.PlaceholderForegroundBrush = placeholderColor.ToBrush();
+ BrushHelpers.UpdateColor(Element.PlaceholderColor, ref _placeholderDefaultBrush,
+ () => Control.PlaceholderForegroundBrush, brush => Control.PlaceholderForegroundBrush = brush);
}
void UpdateText()
diff --git a/Xamarin.Forms.Platform.WP8/SearchBarRenderer.cs b/Xamarin.Forms.Platform.WP8/SearchBarRenderer.cs
index a71041da..b37978d0 100644
--- a/Xamarin.Forms.Platform.WP8/SearchBarRenderer.cs
+++ b/Xamarin.Forms.Platform.WP8/SearchBarRenderer.cs
@@ -117,20 +117,8 @@ namespace Xamarin.Forms.Platform.WinPhone
void UpdatePlaceholderColor()
{
- Color placeholderColor = Element.PlaceholderColor;
-
- if (placeholderColor.IsDefault)
- {
- if (_defaultPlaceholderColorBrush == null)
- return;
-
- Control.PlaceholderForegroundBrush = _defaultPlaceholderColorBrush;
- }
-
- if (_defaultPlaceholderColorBrush == null)
- _defaultPlaceholderColorBrush = Control.PlaceholderForegroundBrush;
-
- Control.PlaceholderForegroundBrush = placeholderColor.ToBrush();
+ BrushHelpers.UpdateColor(Element.PlaceholderColor, ref _defaultPlaceholderColorBrush,
+ () => Control.PlaceholderForegroundBrush, brush => Control.PlaceholderForegroundBrush = brush);
}
void UpdateText()
@@ -140,20 +128,12 @@ namespace Xamarin.Forms.Platform.WinPhone
void UpdateTextColor()
{
- Color textColor = Element.TextColor;
-
- if (textColor.IsDefault)
- {
- if (_defaultTextColorBrush == null)
- return;
-
- Control.Foreground = _defaultTextColorBrush;
- }
-
- if (_defaultTextColorBrush == null)
- _defaultTextColorBrush = Control.Foreground;
-
- Control.Foreground = textColor.ToBrush();
+ BrushHelpers.UpdateColor(Element.TextColor, ref _defaultTextColorBrush,
+ () => Control.Foreground, brush => Control.Foreground = brush);
+
+ // Force the PhoneTextBox control to do some internal bookkeeping
+ // so the colors change immediately and remain changed when the control gets focus
+ Control.OnApplyTemplate();
}
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.WP8/Xamarin.Forms.Platform.WP8.csproj b/Xamarin.Forms.Platform.WP8/Xamarin.Forms.Platform.WP8.csproj
index eda2cdce..e78234f5 100644
--- a/Xamarin.Forms.Platform.WP8/Xamarin.Forms.Platform.WP8.csproj
+++ b/Xamarin.Forms.Platform.WP8/Xamarin.Forms.Platform.WP8.csproj
@@ -142,6 +142,7 @@
<Compile Include="AlignmentExtensions.cs" />
<Compile Include="Animatable.cs" />
<Compile Include="AsyncValue.cs" />
+ <Compile Include="BrushHelpers.cs" />
<Compile Include="CellControl.cs" />
<Compile Include="CollapseWhenEmptyConverter.cs" />
<Compile Include="Deserializer.cs" />