Выбранный пункт теряет стиль когда фокус, выселенный в WPF ListBox

В дополнение к точному и правильному ответу Резы (который я принял как ответ) по этой довольно специализированной теме:

Существует много возможных / жизнеспособных способов подключения дизайнера Winforms и его зависимые объекты (набор инструментов, сетка свойств и т. д.), поэтому последовательность / время добавления определенных сервисов дизайнера в контейнер сервисов области разработки будут отличаться. Некоторые службы должны быть добавлены явно (например, INameCreationService или IToolboxService); другие добавляются фреймворком.

Я еще не пришел к выводу, когда именно фреймворк добавляет BehaviorService к контейнеру сервисов, но я пришел к выводу, что этот сервис добавляется в любой работающий сервис проектирования (то есть тот, который позволяет вам перетащите уже добавленные элементы управления вокруг поверхности дизайна с помощью мыши).

Кроме того, многие объекты в пространстве имен System.ComponentModel.Design предлагают доступ к набору доступных служб, предоставляя метод GetService(). (В ответе Резы используется метод GetService объекта Site.) Если вы обнаружите, что GetService(typeof(BehaviorService)) не может вернуть действительный объект BehaviorService, это обычно означает, что BehaviorService еще не еще не было добавлен в область дизайна ... Я говорю "пока", потому что перетаскивание элементов управления, уже размещенных на поверхности конструктора, требует наличия BehaviorService в контейнере службы хоста. Поэтому, если ваша попытка получить экземпляр BehaviorService с помощью метода GetService не удалась, есть вероятность, что BehaviorService просто еще не был добавлен в конструкторскую среду. Чтобы решить эту проблему, вам обычно нужно просто переместить код для перехвата событий BehaviorService куда-нибудь вниз по течению.

Чтобы проверить, какие сервисы уже добавлены в область проектирования, вы можете проверить коллекцию объекта ServiceContainer объекта поверхности проектирования Services, которая содержит исчерпывающий список сервисов. Как предлагает Реза, хорошим местом для добавления кода, необходимого для подключения к событиям BehaviorService, является обработчик событий OnHandleCreated базовой формы.

24
задан Dave Clemmer 17 August 2011 в 15:14
поделиться