コード例 #1
0
        protected virtual void ВидГруппаОбъектов_KeyUp(object sender, KeyEventArgs событие)
        {
            if (событие.Key == Key.Up)
            {
                if (_номерВыбранногоЭлемента != -1)
                {
                    НомерВыбранногоЭлемента--;
                }
            }

            if (событие.Key == Key.Down)
            {
                if (_номерВыбранногоЭлемента < Группа.Список.Count - 1)
                {
                    НомерВыбранногоЭлемента++;
                }
            }
            if (событие.Key == Key.Enter)
            {
                var группа = this[_номерВыбранногоЭлемента + 1] as ВидГруппаОбъектов;
                if (группа != null)
                {
                    группа.Фокус();
                    //группа.Редактируемый=true;
                    //группа.ВыбранныйЭлемент.Фокус();
                }
            }
            if (событие.Key == Key.Escape)
            {
                var родитель = ВидРодитель as ВидГруппаОбъектов;
                if (родитель != null)
                {
                    родитель.Фокус();
                }
            }

            if (событие.Key == Key.Insert)
            {
                // здесь выбирается какой элемент вставить

                var вставляемыйОбъект = new Пустота(); // тутможно вытавить выбор из Списка видов

                if (НомерВыбранногоЭлемента == -1)
                {
                    _номерВыбранногоЭлемента = 0;
                }
                Группа.Вставить(_номерВыбранногоЭлемента, вставляемыйОбъект);

                var вид = ВыбратьВид(вставляемыйОбъект); // нужно различать вставляемые группы и невставляемые

                //if(ЭтоПустаяГруппа) СписокВидов.Clear();

                Панель.Children.Insert(_номерВыбранногоЭлемента + 1, вид);
                for (int и = _номерВыбранногоЭлемента + 2; и < Группа.Список.Count + 1; и++)
                {
                    var вид2 = (ОбщийВид)СписокВидов[и];
                    вид2.ОбновитьВид();
                }
                НомерВыбранногоЭлемента++;
                //Focus();

                событие.Handled = true;//событие обработано Запрет на дальнейшую обработку, можно обойти
            }

            if (событие.Key == Key.Delete)
            {
                if (НомерВыбранногоЭлемента >= -1 &&
                    НомерВыбранногоЭлемента < Группа.Список.Count - 1 && !ЭтоПустаяГруппа)
                {
                    Группа.Удалить(НомерВыбранногоЭлемента + 1);
                    СписокВидов.RemoveAt(НомерВыбранногоЭлемента + 2);

                    //for (int и = НомерВыбранногоЭлемента+2; и < Группа.Список.Count+1; и++)
                    //{
                    //    var вид = (ОбщийВид) СписокВидов[и];
                    //    вид.ОбновитьВид();
                    //}
                }
                //if (ЭтоПустаяГруппа) СписокВидов.Add(ВидПустогоСписка);
            }
        }
コード例 #2
0
        protected override void ВидГруппаОбъектов_KeyUp(object sender, KeyEventArgs событие)
        {
            Key клавиша = событие.Key;

            if (клавиша == Key.Left)
            {
                if (_номерВыбранногоЭлемента != -1)
                {
                    НомерВыбранногоЭлемента--;
                }
            }

            if (клавиша == Key.Right)
            {
                if (_номерВыбранногоЭлемента < Группа.Список.Count - 1)
                {
                    НомерВыбранногоЭлемента++;
                }
            }
            if (клавиша == Key.Enter)
            {
                var группа = this[_номерВыбранногоЭлемента] as ВидГруппаОбъектов;
                if (группа != null)
                {
                    группа.Фокус();
                }
            }
            if (клавиша == Key.Escape)
            {
                var родитель = ВидРодитель as ВидГруппаОбъектов;
                if (родитель != null)
                {
                    родитель.Фокус();
                }
            }
            if (клавиша == Key.Delete)
            {
                if (НомерВыбранногоЭлемента >= -1 &&
                    НомерВыбранногоЭлемента < Группа.Список.Count - 1 && !ЭтоПустаяГруппа)
                {
                    Группа.Удалить(НомерВыбранногоЭлемента + 1);
                    СписокВидов.RemoveAt(НомерВыбранногоЭлемента + 2);
                }
            }

            if (Клавиатура.усскаяРаскладка.ContainsKey(клавиша))
            {
                //распознование буквы от клавиатуры
                var КультураИнфо = InputLanguageManager.Current.CurrentInputLanguage;

                Адрес адресБуквы;
                адресБуквы = Клавиатура.ДайАдресЮНИКОДаБуквыОтКодаКлавиши(клавиша);



                // правильнее каждый элемент должен иметь ссылку на перечисление, элемент узел шаблона
                // а группа это ряд из узлов с перечислением

                var элемент = new ПроксиОбъекта {
                    АдресПримитива = адресБуквы
                };

                var вид = ВыбратьВид(элемент); // если в группе один тип, то выбор каждый раз не нужен

                if (ЭтоПустаяГруппа)
                {
                    //СписокВидов.Clear();// очистить панель от вида пустого списка
                    Группа2.Вставить(0, элемент);
                    Панель.Children.Insert(1, вид);
                }
                else
                {
                    Группа2.Вставить(_номерВыбранногоЭлемента + 1, элемент);
                    Панель.Children.Insert(_номерВыбранногоЭлемента + 2, вид);
                }



                //for (int и = НомерВыбранногоЭлемента + 2; и < Группа.Список.Count+1; и++)
                //{
                //    var вид2 = (ОбщийВид)СписокВидов[и];
                //    вид2.ОбновитьВид(); // стирает контент
                //}

                НомерВыбранногоЭлемента++;
            }
        }