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(ВидПустогоСписка); } }
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.ОбновитьВид(); // стирает контент //} НомерВыбранногоЭлемента++; } }