Скопировать недвижимость в буфер обмена - PullRequest
1 голос
/ 02 апреля 2010

У меня есть строковое свойство в моем ViewModel / Datacontext и я хочу простую кнопку, которая копирует его содержимое в буфер обмена. Можно ли это сделать из XAML, или мне нужно обработать событие нажатия кнопки (или использовать ICommand) для достижения этой цели? Я думал, что будет работать следующее, но моя кнопка всегда серого цвета:

    <Button Width="100" Content="Copy" Command="ApplicationCommands.Copy" 
CommandTarget="{Binding MyStringProperty}"/>

1 Ответ

2 голосов
/ 02 апреля 2010

Ожидается, что ApplicationCommands будут находиться на панели инструментов или в меню, которое предоставит им FocusScope на основе RoutedUICommands. Если ваша кнопка находится за пределами Панели инструментов или Меню, вам необходимо явно объявить область фокусировки:

<Button 
  Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"
  Command="ApplicationCommands.Copy" 
  FocusManager.IsFocusScope="True"/>

CommandTarget используется для объявления того, какой элемент будет предоставлять FocusScope, что означает, что кнопка «Копировать» будет включена только тогда, когда элемент, объявленный в CommandTarget, имеет фокус, а в случае копирования выделен текст:

<Button 
  Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"
  Command="ApplicationCommands.Copy"
  CommandTarget="{Binding ElementName=MyElement}" />

В ответ на ваш конкретный вопрос вам необходимо перехватить команду ApplicationCommands.Copy, чтобы получить / установить MyStringProperty вашего ViewModel; и, честно говоря, я не уверен, с чего бы начать. Может быть, кто-то умнее здесь мог бы обеспечить эту часть головоломки.

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