Найти фокус, чтобы знать, что копировать - PullRequest
0 голосов
/ 17 января 2012

У меня есть кнопка Копировать на моей ленте, и мне нужно определить, на какой элемент управления нацелен фокус, чтобы я знал, какой метод Копии вызывать.Есть идеи, как это сделать?Я думал о FocusManager.GetFocusedElement, но я использую MVVM, поэтому я не знаю, что передать в качестве аргумента.

private void Copy()
    {
        if (**Here_I_need_to_know_what_is_focused** is DataGridCell)
        {
            ApplicationCommands.Copy.Execute(null, this.DisplayedData);
        }
        else if ((this.CurrentFiles.SelectedItem is DSViewModel) || (this.CurrentFiles.SelectedItem is QViewModel))
        {
            this.CurrentFiles.Copy(this.CurrentFiles.SelectedItem);
        }
        else
        {
            ApplicationCommands.Copy.Execute(null, Keyboard.FocusedElement);
        }
    }

1 Ответ

0 голосов
/ 18 января 2012

Это действительно зависит от того, где находится ваш код.

Я предполагаю, что он находится в модели представления - в этом случае у вас не будет доступа к FocusMangager напрямую.Чтобы получить фокусированный элемент, вам нужно передать его функции через атрибут CommandParameter.Это может быть сделано путем привязки, если существует только один возможный целевой объект.

Однако я могу себе представить, что это может быть не вариант, поскольку кнопка копирования на вашей ленте, скорее всего, обрабатывает несколько объектов.В этом случае я бы не использовал атрибуты Command и CommandParameter, а реализовал обработчик щелчка в коде.

Теперь у вас есть возможность определить фокусированный элемент или другой целевой объект, используя все функциональные возможности вида, включая FocusManager.После того как вы определили цель, вы можете вызывать метод Execute команды, передавая правильный объект в качестве параметра.

Прежде чем пытаться получить сфокусированный элемент, вы должны, однако, запросить метод CanExecute, чтобы определить целевой объект, только если команда может быть выполнена.Если вы хотите включить / отключить кнопку копирования, основываясь на результатах метода CanExecute, потребуется дополнительная работа.

Примечание: Этот пост предлагаетчто при использовании менеджера фокуса с DataGrid.

могут возникнуть некоторые проблемы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...