| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | using System;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Media;using System.Windows.Input;namespace OpenSEMI.Ctrlib.Controls{    public class EditTextBlockAdorner: Adorner    {        public TextBoxEx TextBox        {            get { return this._textBox; }        }        private readonly VisualCollection _collection;        private readonly TextBoxEx _textBox;        private readonly TextBlock _textBlock;        public EditTextBlockAdorner(EditTextBlock adornedElement)            : base(adornedElement)        {            _collection = new VisualCollection(this);            _textBox = new TextBoxEx();            _textBlock = adornedElement;            Binding binding = new Binding("Text") { Source = adornedElement };            binding.Mode = BindingMode.TwoWay;            _textBox.SetBinding(TextBoxEx.TextProperty, binding);            _textBox.EditBoxMode = adornedElement.EditBoxMode;            _textBox.AllowEmpty = adornedElement.AllowEmpty;            _textBox.AllowBackgroundChange = adornedElement.AllowBackgroundChange;            _textBox.MaxValue = adornedElement.MaxValue;            _textBox.MinValue = adornedElement.MinValue;            _textBox.Accuracy = adornedElement.Accuracy;            _textBox.IsScrollToEnd = adornedElement.IsScrollToEnd;            binding = new Binding("TextSaved") { Source = adornedElement };            binding.Mode = BindingMode.TwoWay;            _textBox.SetBinding(TextBoxEx.TextSavedProperty, binding);            _textBox.KeyUp += _textBox_KeyUp;            _collection.Add(_textBox);            if (!adornedElement.IsEnabled)                _textBlock.Background = Brushes.Gray;        }        public event RoutedEventHandler TextBoxLostFocus        {            add            {                _textBox.LostFocus += value;            }            remove            {                _textBox.LostFocus -= value;            }        }        public event KeyEventHandler TextBoxKeyUp        {            add            {                _textBox.KeyUp += value;            }            remove            {                _textBox.KeyUp -= value;            }        }        protected override Visual GetVisualChild(int index)        {            return _collection[index];        }        protected override int VisualChildrenCount        {            get            {                return _collection.Count;            }        }        protected override Size ArrangeOverride(Size finalSize)        {            _textBox.Arrange(new Rect(0, 0, _textBlock.ActualWidth, _textBlock.ActualHeight));            _textBox.Focus();            _textBox.ScrollToEnd();             return finalSize;        }        private void _textBox_KeyUp(object sender, KeyEventArgs e)        {            if (e.Key == Key.Enter)            {                _textBox.Text = _textBox.Text.Replace("\r\n", string.Empty);                BindingExpression expression = _textBox.GetBindingExpression(TextBoxEx.TextProperty);                if (null != expression)                    expression.UpdateSource();                expression = _textBox.GetBindingExpression(TextBoxEx.TextSavedProperty);                if (null != expression)                    expression.UpdateSource();            }        }    }}
 |