Теперь я собираюсь изучить RoutedEvents.Я понимаю пузыри и туннелирование и все.Но у меня есть небольшая проблема, я не уверен, как справиться.
У меня есть ItemsControl в моем собственном определяемом UserControl (наследует TabItem).Этот itemsControl может быть ListBox или каким-либо селектором, который еще не определен (зависит от того, что лучше всего с этим решением).
Теперь, когда выбран один элемент (еще не уверен, какой будет лучший метод выбора, возможно, двойной щелчок)Мне нужно захватить событие в TabControl, который содержит мой UserControl.К счастью, когда мой userControl помещен в визуальное дерево XAML, происходит всплывание пузырькового события, и события могут достичь TabControl.Однако у меня все еще есть некоторые проблемы с реализацией этого.
1) Допустим, я установил его как MouseDoubleClick. Я не хочу, чтобы другие DoubleClicks (как на других вкладках или вне ItemsControlItems).Я думаю, вы всегда можете проверить, откуда происходят события, чтобы убедиться, что они правильные, но я не чувствую, что это правильный путь, и это может вызвать проблемы.
2) Если я установлю событиедля SelectionChanged и ItemsControl to ListBox Я должен был бы убедиться, что сам ListBox не обрабатывает его, чтобы он мог добраться до tabControl.Как бы я это сделал?
3) То же, что и 2), но TabControl сам по себе является селектором, поэтому он будет вызывать свои собственные события selectionchange, не так ли?как это будет работатьБудет ли обработчик получать как из списка, так и из TabControl?
4) Не уверен, что ItemsControl я должен использовать.Если я использую его только для двойного щелчка по элементу, а затем для обработки события, ListBox не будет слишком много.У этого есть много эффектов, которые были бы нежелательны как выбор и тому подобное.Лучше определить свой собственный ItemsControl или, может быть, использовать ListBox и перезаписать некоторые из его свойств, таких как выбор (как можно это сделать?)?
5) Источником события будет ItemsContainer, но я хочусам предмет.Есть простой способ получить к нему доступ, не так ли?
6) Допустим, я положил кнопку, а в шаблоне данных я не хочу прикреплять идентификатор объекта через кнопку и захватывать егогде нажатие кнопки обрабатывается, чтобы определить, что это был за элемент.Есть ли свойство, чтобы сделать это, или я должен был бы определить его сам?
7) Будет ли лучший способ действий здесь, возможно, для создания моего собственного события?
Ваше отношение к этой проблеме икомментарии о том, какой процесс лучше всего предпринять здесь, оценены.
РЕДАКТИРОВАТЬ: Решено добавить немного больше информации в соответствии с просьбой.
К чему я стремлюсь;когда я запускаю программу, у меня есть TabControl с 1 вкладкой.Эта вкладка отличается от остальных вкладок тем, что содержит список объектов (CompanyModel).Этот список - ItemsControl, о котором я упоминаю.Когда вы нажимаете одну компанию из этого списка, добавляется новая вкладка с информацией об этой компании.
Мое решение состояло в том, чтобы создать коллекцию TabItem в качестве источника для TabControl.Затем я определил бы мои 2 типа TabItems в отдельном исходном файле XAML (не уверен, как его назвать, просто добавив новый usercontrol).Один из них - начальный, в котором появляется список, другой - принимает CompanyModel в качестве параметра конструктора и показывает информацию об этом.
Это работает, хотя мне не нравится идея отдельного табитирования списка компаний.я не могу определить его в tabcontrol, потому что я могу определить только элементы или источники, но не оба.
Я попробовал эту идею, поместив кнопку в шаблон списка данных, которая отображает идентификатор выбранной компании.в TabControl, обрабатывая его там и добавляя новый TabItem с CompanyModel.Это было просто решение попробовать, и у меня были проблемы, например, если бы я добавил еще одну кнопку в CompanyTabs, я бы также добавил их в TabControl.
Так что мою проблему можно решить, найдя хороший способ всплыть на событиеиз оригинального списка Tab или Если бы я мог определить вкладку в том же месте, что и TabControl.
Я знаю, что одно другое решение будет иметь список отдельно от TabControl, но другие хотели бы посмотреть, как это получится, и я хотел бы узнать, как я это сделаю.