Home
Manage Your Code
Snippet: Auto Complete TextBox C# (C#)
Title: Auto Complete TextBox C# Language: C#
Description: See Auto Complete TextBox XAML. see notes for link Views: 892
Author: Phil Vollhardt Date Added: 8/8/2008
Copy Code  
1/* Auto Complete TextBox
2 * by Phil Vollhardt
3 * thephilv@gmail.com
4 */
5using System;
6using System.IO;
7using System.Windows;
8using System.Windows.Controls;
9using System.Windows.Data;
10using System.Collections.Generic;
11
12namespace philVsControls {
13    public partial class AutoCompTextBox {
14        protected List<string> _values;
15        protected CollectionViewSource _viewS;
16        public static readonly DependencyProperty HorizontalScrollbarProperty = DependencyProperty.Register("HorizontalScrollbar", typeof(ScrollBarVisibility), 
17            typeof(AutoCompTextBox), new UIPropertyMetadata(ScrollBarVisibility.Disabled, new PropertyChangedCallback(OnHorizontalScrollbarChanged), 
18                new CoerceValueCallback(OnCoerceHorizontalScrollbar)));
19        public static readonly DependencyProperty VerticalScrollbarProperty = DependencyProperty.Register("VerticalScrollbar", typeof(ScrollBarVisibility), 
20            typeof(AutoCompTextBox), new UIPropertyMetadata(ScrollBarVisibility.Disabled, new PropertyChangedCallback(OnVerticalScrollbarChanged), 
21                new CoerceValueCallback(OnCoerceVerticalScrollbar)));
22        public static readonly DependencyProperty SourceObjDataProviderProperty = DependencyProperty.Register("SourceObjDataProvider", typeof(ObjectDataProvider), 
23            typeof(AutoCompTextBox), new UIPropertyMetadata(null, new PropertyChangedCallback(OnSourceObjDataProviderChanged), 
24                new CoerceValueCallback(OnCoerceSourceObjDataProvider)));
25        public static readonly DependencyProperty DropBoxMaxHeightProperty = DependencyProperty.Register("DropBoxMaxHeight", typeof(double), typeof(AutoCompTextBox), 
26            new UIPropertyMetadata(100.0, new PropertyChangedCallback(OnDropBoxMaxHeightChanged), new CoerceValueCallback(OnCoerceDropBoxMaxHeight)));
27
28        public AutoCompTextBox() {
29            this.InitializeComponent();
30
31            // Insert code required on object creation below this point.

32            _viewS = (CollectionViewSource)this.FindResource("_vs");
33            _tb.PreviewKeyUp += new System.Windows.Input.KeyEventHandler(_tb_PreviewKeyDown);
34        }
35
36        protected void _tb_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) {
37            switch (e.Key) {
38                case System.Windows.Input.Key.Up:
39                    if (_lb.SelectedIndex > 0) {
40                        _lb.SelectedIndex -= 1;
41                        _lb.ScrollIntoView(_lb.SelectedItem);
42                    }
43                    break;
44                case System.Windows.Input.Key.Down:
45                    if (_lb.SelectedIndex < _lb.Items.Count) {
46                        _lb.SelectedIndex += 1;
47                        _lb.ScrollIntoView(_lb.SelectedItem);
48                    }
49                    break;
50                case System.Windows.Input.Key.Enter:
51                    if (_lb.Items.Count > 0) {
52                        _tb.Text = _lb.SelectedItem.ToString();
53                        _lb.Visibility = Visibility.Hidden;
54                        _tb.SelectionStart = _tb.Text.Length;
55                    }
56                    break;
57            }
58        }
59
60
61        protected void CollectionViewSource_Filter(object sender, FilterEventArgs e) {
62            e.Accepted = e.Item.ToString().StartsWith(_tb.Text, StringComparison.CurrentCultureIgnoreCase);
63
64        }
65
66        protected void _tb_TextChanged(object sender, TextChangedEventArgs e) {
67
68            if (null != _viewS.Source) {
69                this._lb.Visibility = this._tb.Text != "" ? Visibility.Visible : Visibility.Hidden;
70                _viewS.View.Refresh();
71            }
72            this.Text = _tb.Text;
73            
74        }
75
76        protected void _uc_SizeChanged(object sender, SizeChangedEventArgs e) {
77            this.Resources["_width"] = e.NewSize.Width;
78        }
79        #region horizscrollbar dp   ...        #endregion
118                #region vertscrollbar dp   ...        #endregion
157                #region SourceObjectDataProvider   ...        #endregion
193        #region Max Height of listbox   ...                #endregion
232        #region Text dp   ...                #endregion
273
274    }
275}
Usage
See Auto Complete TextBox XAML. see notes for link
Notes
http://www.codekeep.net/snippets/403cd3d6-6139-43c1-a3b4-f6dcacfbfc7a.aspx