WPF: обработка всплывающих событий только из одного конкретного контента - PullRequest
1 голос
/ 09 июля 2010

Теперь я собираюсь изучить 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, но другие хотели бы посмотреть, как это получится, и я хотел бы узнать, как я это сделаю.

1 Ответ

0 голосов
/ 19 ноября 2011

пожалуйста, загляните в этот блог, может быть, это поможет вам.http://blogs.u2u.be/diederik/post/2009/09/09/In-WPF-SelectionChanged-does-not-mean-that-the-selection-changed.aspx

...