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.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.EventArguments; namespace Tango.Touch.Controls { public class TouchComboBox : Control { static TouchComboBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchComboBox), new FrameworkPropertyMetadata(typeof(TouchComboBox))); } public String Watermark { get { return (String)GetValue(WatermarkProperty); } set { SetValue(WatermarkProperty, value); } } public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(String), typeof(TouchComboBox), 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(TouchComboBox), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); public IList ItemsSource { get { return (IList)GetValue(ItemsSourceProperty); } set { SetValue(ItemsSourceProperty, value); } } public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IList), typeof(TouchComboBox), 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(TouchComboBox), 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(TouchComboBox), new PropertyMetadata(null)); public String Title { get { return (String)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(String), typeof(TouchComboBox), new PropertyMetadata(null)); public double MinPopupWidth { get { return (double)GetValue(MinPopupWidthProperty); } set { SetValue(MinPopupWidthProperty, value); } } public static readonly DependencyProperty MinPopupWidthProperty = DependencyProperty.Register("MinPopupWidth", typeof(double), typeof(TouchComboBox), new PropertyMetadata(300.0)); public double MinPopupHeight { get { return (double)GetValue(MinPopupHeightProperty); } set { SetValue(MinPopupHeightProperty, value); } } public static readonly DependencyProperty MinPopupHeightProperty = DependencyProperty.Register("MinPopupHeight", typeof(double), typeof(TouchComboBox), new PropertyMetadata(200.0)); public String DisplayMemberPath { get { return (String)GetValue(DisplayMemberPathProperty); } set { SetValue(DisplayMemberPathProperty, value); } } public static readonly DependencyProperty DisplayMemberPathProperty = DependencyProperty.Register("DisplayMemberPath", typeof(String), typeof(TouchComboBox), new PropertyMetadata(null)); public String ValuePath { get { return (String)GetValue(ValuePathProperty); } set { SetValue(ValuePathProperty, value); } } public static readonly DependencyProperty ValuePathProperty = DependencyProperty.Register("ValuePath", typeof(String), typeof(TouchComboBox), new PropertyMetadata(null)); public TouchComboBox() { this.RegisterForPreviewMouseOrTouchDown(OnMouseDown); this.RegisterForPreviewMouseOrTouchUp(OnMouseUp); } private void OnMouseUp(object sender, MouseOrTouchEventArgs e) { ShowSelectionOnTouchPanel(); } private void OnMouseDown(object sender, MouseOrTouchEventArgs e) { System.Windows.Input.Keyboard.Focus(this); } private void ShowSelectionOnTouchPanel() { TouchPanel touchPanel = this.FindAncestor(); if (touchPanel != null) { touchPanel.CurrentComboBox = this; } } internal void SetResultFromTouchPanel(Object selectedObject) { SelectedItem = selectedObject; } } }