Определить, когда выбран элемент управления на проектной поверхности - PullRequest
5 голосов
/ 29 марта 2011

Я пишу расширение Expression Blend 4 и хочу определить (в моем расширении), когда выбран элемент управления или элемент на поверхности конструктора. Может кто-нибудь сказать мне, как я могу это обнаружить? Спасибо, Тим

1 Ответ

0 голосов
/ 30 марта 2011

Я немного продолжил мое руководство по написанию расширений . Когда вы посмотрите на пример кода этого проекта, приведенный ниже код должен быть понятным.

Первый метод, указанный ниже, вызывается при изменении активного документа. Этот метод обрабатывает событие ActiveDocumentChanged IDocumentService . Сначала он получает содержимое TimelinePane из реестра палитры. В этом контенте живет ActiveSceneViewModel . ActiveSceneViewModel - это модель представления, которая содержит активную сцену (= текущий файл xaml, который редактируется). ActiveSceneViewModel содержит набор выбранных элементов, ElementSelectionSet. У которого есть событие (Изменено), которое запускается при его изменении. Обработайте это событие.

В этом обработчике событий у вас будет доступ к набору выбора сразу после его изменения.

private void ActiveDocumentChanged(object sender, DocumentChangedEventArgs e)
{
    var timelinePane = 
         (TimelinePane)WindowService.PaletteRegistry["Designer_TimelinePane"].Content;
    _activeSceneViewModel = timelinePane.ActiveSceneViewModel;
    _activeSceneViewModel.ElementSelectionSet.Changed += 
         new System.EventHandler(ElementSelectionSet_Changed);

    //some other goes here....
}

void ElementSelectionSet_Changed(object sender, System.EventArgs e)
{
    SceneElementSelectionSet selectionSet 
        = sender as SceneElementSelectionSet;
    // get the selected elements from the selection set
}
...