diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs new file mode 100644 index 000000000..b4bbdfe69 --- /dev/null +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Tango.Core.Commands; + +namespace Tango.Touch.Controls +{ + public class TouchAutoComplete : TouchInput + { + private TextBox _textBox; + private Popup _popup; + + public String Text + { + get { return (String)GetValue(TextProperty); } + set { SetValue(TextProperty, value); } + } + public static readonly DependencyProperty TextProperty = + DependencyProperty.Register("Text", typeof(String), typeof(TouchAutoComplete), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public String Watermark + { + get { return (String)GetValue(WatermarkProperty); } + set { SetValue(WatermarkProperty, value); } + } + public static readonly DependencyProperty WatermarkProperty = + DependencyProperty.Register("Watermark", typeof(String), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public IList ItemsSource + { + get { return (IList)GetValue(ItemsSourceProperty); } + set { SetValue(ItemsSourceProperty, value); } + } + public static readonly DependencyProperty ItemsSourceProperty = + DependencyProperty.Register("ItemsSource", typeof(IList), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public IList EffectiveItemsSource + { + get { return (IList)GetValue(EffectiveItemsSourceProperty); } + private set { SetValue(EffectiveItemsSourceProperty, value); } + } + public static readonly DependencyProperty EffectiveItemsSourceProperty = + DependencyProperty.Register("EffectiveItemsSource", typeof(IList), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public IAutoCompleteProvider AutoCompleteProvider + { + get { return (IAutoCompleteProvider)GetValue(AutoCompleteProviderProperty); } + set { SetValue(AutoCompleteProviderProperty, value); } + } + public static readonly DependencyProperty AutoCompleteProviderProperty = + DependencyProperty.Register("AutoCompleteProvider", typeof(IAutoCompleteProvider), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public object SelectedItem + { + get { return (object)GetValue(SelectedItemProperty); } + set { SetValue(SelectedItemProperty, value); } + } + public static readonly DependencyProperty SelectedItemProperty = + DependencyProperty.Register("SelectedItem", typeof(object), typeof(TouchAutoComplete), new PropertyMetadata(null, (d, e) => (d as TouchAutoComplete).OnSelectedItemChanged())); + + public String DisplayMemberPath + { + get { return (String)GetValue(DisplayMemberPathProperty); } + set { SetValue(DisplayMemberPathProperty, value); } + } + public static readonly DependencyProperty DisplayMemberPathProperty = + DependencyProperty.Register("DisplayMemberPath", typeof(String), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public DataTemplate ItemTemplate + { + get { return (DataTemplate)GetValue(ItemTemplateProperty); } + set { SetValue(ItemTemplateProperty, value); } + } + public static readonly DependencyProperty ItemTemplateProperty = + DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public DataTemplate SelectedItemTemplate + { + get { return (DataTemplate)GetValue(SelectedItemTemplateProperty); } + set { SetValue(SelectedItemTemplateProperty, value); } + } + public static readonly DependencyProperty SelectedItemTemplateProperty = + DependencyProperty.Register("SelectedItemTemplate", typeof(DataTemplate), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public RelayCommand ItemSelectedCommand + { + get { return (RelayCommand)GetValue(ItemSelectedCommandProperty); } + private set { SetValue(ItemSelectedCommandProperty, value); } + } + public static readonly DependencyProperty ItemSelectedCommandProperty = + DependencyProperty.Register("ItemSelectedCommand", typeof(RelayCommand), typeof(TouchAutoComplete), new PropertyMetadata(null)); + + public double PopupHeight + { + get { return (double)GetValue(PopupHeightProperty); } + set { SetValue(PopupHeightProperty, value); } + } + public static readonly DependencyProperty PopupHeightProperty = + DependencyProperty.Register("PopupHeight", typeof(double), typeof(TouchAutoComplete), new PropertyMetadata(200.0)); + + public TouchAutoComplete() + { + AutoCompleteProvider = new AutoCompleteProvider<Object>((obj, filter) => { return obj.ToString().ToLower().StartsWith(filter.ToLower()); }); + ItemSelectedCommand = new RelayCommand(() => OnSelectedItemChanged()); + } + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + + _textBox = GetTemplateChild("PART_TextBox") as TextBox; + _popup = GetTemplateChild("PART_Popup") as Popup; + + _textBox.PreviewKeyUp += _textBox_PreviewKeyUp; + _textBox.GotFocus += _textBox_GotFocus; + _textBox.LostFocus += _textBox_LostFocus; + + OnSelectedItemChanged(); + } + + private void _textBox_LostFocus(object sender, RoutedEventArgs e) + { + _popup.IsOpen = false; + } + + private void _textBox_GotFocus(object sender, RoutedEventArgs e) + { + if (Text != null) + { + _textBox.CaretIndex = _textBox.Text.Length; + } + } + + private void _textBox_PreviewKeyUp(object sender, KeyEventArgs e) + { + if (AutoCompleteProvider != null && ItemsSource != null) + { + EffectiveItemsSource = AutoCompleteProvider.Filter(ItemsSource, Text); + + if (EffectiveItemsSource.Count > 0) + { + _popup.IsOpen = true; + } + else + { + _popup.IsOpen = false; + } + } + } + + private void OnSelectedItemChanged() + { + if (SelectedItem != null && _textBox != null) + { + Text = SelectedItem.GetPropertyValueByPath(DisplayMemberPath).ToString(); + + if (Text != null) + { + _textBox.CaretIndex = _textBox.Text.Length; + } + } + + if (_popup != null) + { + _popup.IsOpen = false; + } + } + + static TouchAutoComplete() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchAutoComplete), new FrameworkPropertyMetadata(typeof(TouchAutoComplete))); + } + } +} |
