summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs')
-rw-r--r--Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs157
1 files changed, 157 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs b/Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs
new file mode 100644
index 00000000..4cc8ac1c
--- /dev/null
+++ b/Xamarin.Forms.Platform.WinRT.Phone/SearchBox.xaml.cs
@@ -0,0 +1,157 @@
+using System;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+
+namespace Xamarin.Forms.Platform.WinRT
+{
+ public class SearchBoxQuerySubmittedEventArgs
+ : EventArgs
+ {
+ }
+
+ public class SearchBoxQueryChangedEventArgs
+ : EventArgs
+ {
+ public SearchBoxQueryChangedEventArgs (string query)
+ {
+ QueryText = query;
+ }
+
+ public string QueryText
+ {
+ get;
+ private set;
+ }
+ }
+
+ public delegate void QueryChangedEventHandler (SearchBox search, SearchBoxQueryChangedEventArgs args);
+ public delegate void QuerySubmittedEventHandler (SearchBox search, SearchBoxQuerySubmittedEventArgs args);
+
+ public sealed partial class SearchBox
+ {
+ public SearchBox ()
+ {
+ InitializeComponent ();
+
+ IsEnabledChanged += OnIsEnabledChanged;
+ }
+
+ public event QuerySubmittedEventHandler QuerySubmitted;
+ public event QueryChangedEventHandler QueryChanged;
+
+ public static readonly DependencyProperty QueryTextProperty = DependencyProperty.Register (
+ "QueryText", typeof(string), typeof(SearchBox), new PropertyMetadata (null, OnQueryTextChanged));
+
+ public string QueryText
+ {
+ get { return (string)GetValue (QueryTextProperty); }
+ set { SetValue (QueryTextProperty, value); }
+ }
+
+ public static readonly DependencyProperty PlaceholderTextProperty = DependencyProperty.Register (
+ "PlaceholderText", typeof(string), typeof(SearchBox), new PropertyMetadata (null, OnPlaceholderChanged));
+
+ public string PlaceholderText
+ {
+ get { return (string)GetValue (PlaceholderTextProperty); }
+ set { SetValue (PlaceholderTextProperty, value); }
+ }
+
+ public static readonly DependencyProperty HorizontalTextAlignmentProperty = DependencyProperty.Register (
+ "HorizontalTextAlignment", typeof(string), typeof(SearchBox), new PropertyMetadata (null, OnAlignmentChanged));
+
+ public TextAlignment HorizontalTextAlignment
+ {
+ get { return (TextAlignment)GetValue (HorizontalTextAlignmentProperty); }
+ set { SetValue (HorizontalTextAlignmentProperty, value); }
+ }
+
+ protected override void OnApplyTemplate ()
+ {
+ base.OnApplyTemplate ();
+
+ GoToNormal ();
+
+ _searchTextBox = (TextBox)GetTemplateChild ("SearchTextBox");
+
+ ((Windows.UI.Xaml.Controls.Button) GetTemplateChild ("SearchButton")).Click += OnSearchButtonClicked;
+
+ UpdatePlaceholder ();
+ UpdateAlignment ();
+ }
+
+ protected override void OnGotFocus (RoutedEventArgs e)
+ {
+ base.OnGotFocus (e);
+
+ VisualStateManager.GoToState (this, "Focused", true);
+ }
+
+ protected override void OnLostFocus (RoutedEventArgs e)
+ {
+ base.OnLostFocus (e);
+
+ GoToNormal ();
+ }
+
+ void OnSearchButtonClicked (object sender, RoutedEventArgs e)
+ {
+ var querySubmitted = QuerySubmitted;
+ if (querySubmitted != null)
+ querySubmitted (this, new SearchBoxQuerySubmittedEventArgs());
+ }
+
+ TextBox _searchTextBox;
+
+ void GoToNormal ()
+ {
+ VisualStateManager.GoToState (this, (IsEnabled) ? "Normal" : "Disabled", false);
+ }
+
+ void UpdatePlaceholder ()
+ {
+ if (_searchTextBox == null)
+ return;
+
+ _searchTextBox.PlaceholderText = PlaceholderText;
+ }
+
+ void OnIsEnabledChanged (object sender, DependencyPropertyChangedEventArgs e)
+ {
+ string state = "Normal";
+ if (!(bool) e.NewValue)
+ state = "Disabled";
+ else if (FocusState != FocusState.Unfocused)
+ state = "Focused";
+
+ VisualStateManager.GoToState (this, state, true);
+ }
+
+ static void OnQueryTextChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var search = (SearchBox) d;
+ var changed = search.QueryChanged;
+ if (changed != null)
+ changed (search, new SearchBoxQueryChangedEventArgs ((string) e.NewValue));
+ }
+
+ static void OnPlaceholderChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ ((SearchBox) d).UpdatePlaceholder ();
+ }
+
+ static void OnAlignmentChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ ((SearchBox) d).UpdateAlignment ();
+ }
+
+ void UpdateAlignment ()
+ {
+ if (_searchTextBox == null) {
+ return;
+ }
+
+ _searchTextBox.TextAlignment = HorizontalTextAlignment.ToNativeTextAlignment();
+ }
+ }
+}