WPF: обработка всплывающих событий только из одного конкретного контента
Теперь я собираюсь изучить RoutedEvents. Я понимаю пузыри и туннелирование и все. Но у меня есть небольшая проблема, я не уверен, как справиться.
У меня есть ItemControl в моем собственном определенном UserControl (наследует TabItem). Этот itemsControl может быть ListBox или каким-либо селектором, еще не определенным (зависит от того, что лучше всего с этим решением).
Теперь, когда выбран один элемент (пока не уверен, какой будет лучший метод выбора, возможно, двойной щелчок), мне нужно захватить событие в TabControl, которое содержит мой UserControl. К счастью, когда мой userControl помещен в визуальное дерево XAML, происходит всплывание пузырькового события, и события могут достигать TabControl. Однако у меня все еще есть некоторые проблемы с реализацией этого.
1) Допустим, я установил его как MouseDoubleClick. Я не хочу, чтобы другие DoubleClicks (как на других вкладках или вне ItemsControlItems). Я думаю, вы всегда можете проверить, откуда происходят события, чтобы убедиться, что они правильные, но я не чувствую, что это правильный путь, и это может вызвать проблемы.
2) Если я установлю событие в SelectionChanged, а ItemsControl в ListBox, я должен убедиться, что сам ListBox не обрабатывает его, чтобы он мог добраться до tabControl. Как бы я это сделал?
3) То же, что и 2), но TabControl сам по себе является селектором, поэтому он вызывает собственные события selectionchange, не так ли? как это будет работать Будет ли обработчик получать как из списка, так и из TabControl?
4) Не уверен, что ItemsControl я должен использовать. Если я использую его только для двойного щелчка по элементу, а затем для обработки события, ListBox не будет слишком много. У этого есть много эффектов, которые были бы нежелательны как выбор и тому подобное. Лучше определить свой собственный ItemsControl или, может быть, использовать ListBox и перезаписать некоторые из его свойств, таких как выбор (как можно это сделать?)?
5) Источником события будет ItemsContainer, но я не хочу сам этот элемент. Есть простой способ получить к нему доступ, не так ли?
6) Допустим, я поместил кнопку, и в DataTemplate я не хочу прикреплять идентификатор объекта через кнопку и захватывать его там, где обрабатывается нажатие кнопки, чтобы определить, что это был за элемент. Есть ли свойство, чтобы сделать это, или я должен был бы определить это сам?
7) Будет ли лучший способ действий здесь, чтобы создать мое собственное мероприятие?
Ваше мнение по этому вопросу и комментарии о том, какой процесс лучше всего предпринять, приветствуется.
РЕДАКТИРОВАТЬ: решил добавить немного больше информации, как просили.
К чему я стремлюсь; Когда я запускаю программу, у меня есть TabControl с 1 вкладкой. Эта вкладка отличается от остальных вкладок тем, что в ней содержится список объектов (CompanyModel). Этот список - ItemsControl, о котором я упоминаю. Когда вы нажимаете одну компанию из этого списка, добавляется новая вкладка с информацией об этой компании.
Моим решением было создать коллекцию TabItem в качестве источника для TabControl. Затем я определил бы мои 2 типа TabItems в отдельном исходном файле XAML (не уверен, как его назвать, просто добавив новый usercontrol). Один из них является начальным, где появляется список, другой принимает CompanyModel в качестве параметра конструктора и показывает информацию об этом.
Это работает, хотя мне не нравится идея отдельного определения табеля списка компаний, я не могу определить его в tabcontrol, потому что я могу только определить элементы или источники, но не оба.
Я попробовал эту идею, поместив кнопку в шаблон Data List, которая отображает идентификатор выбранной компании до TabControl, обрабатывает его там и добавляет новый TabItem с CompanyModel. Это было просто решение попробовать, и у него есть проблемы, такие как, если я добавлю еще одну кнопку в CompanyTabs, я бы также добавил их в TabControl.
Таким образом, мою проблему можно решить, найдя хороший способ вызвать событие из оригинального listTab или если я смогу определить вкладку в том же месте, что и TabControl.
Я знаю, что одно другое решение будет иметь список отдельно от TabControl, но другие хотели бы посмотреть, как это получится, и я хотел бы узнать, как я это сделаю.
1 ответ
Посмотрите пожалуйста в этом блоге, может быть, это поможет вам. http://blogs.u2u.be/diederik/post/2009/09/09/In-WPF-SelectionChanged-does-not-mean-that-the-selection-changed.aspx