2013-09-04 4 views
1

У меня есть простая кнопка в моем приложении:Как скопировать текст кнопки в буфер обмена?

<Button Content="{Binding ViewModel.Name}" Command="{Binding ViewModel.Command}" MinWidth="50"> 
</Button> 

Я хочу, чтобы при нажатии правой кнопки мыши на кнопке, содержание (текст) внутри кнопки будет скопирован в буфере обмена.

Можем ли мы это сделать?

Заранее спасибо

+0

Так как его связывание с 'ViewModel.Name', просто скопировать в буфер обмена, которые затем. – Bolu

ответ

1

Вы можете использовать взаимодействия, чтобы привязать событие MouseRightButtonUp на кнопке к команде на вашей модели просмотра. Взаимодействия вы можете найти в

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="MouseRightButtonUp"> 
     <i:InvokeCommandAction Command="{Binding CopyButtonText}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

вы Виль импортировать интерактивность имен:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.I‌​nteractivity" 

Window.Interactivity имен имеет EventTrigger и InvokeCommandAction.

и в copybuttonTest обработчика команд вы можете сделать

System.Windows.Clipboard.SetData(DataFormats.Text, Name); 
+0

Какое пространство имен для ? Спасибо – fnsanchez

+0

здесь обновил ответ .. надеюсь, что это поможет – Nitin

2

Сначала получить содержание кнопки

string contntText = btnName.Content.ToString(); 

Затем установите текст в буфер обмена,

System.Windows.Forms.Clipboard.SetText(contntText); 
+1

Что разрушит MVVM –

1

Изменить кнопку, чтобы:

<Button Content="{Binding ViewModel.Name}" Command="{Binding ViewModel.Command}" MinWidth="50"> 
    <Button.InputBindings> 
     <MouseBinding Gesture="RightClick" Command="ViewModel.CopyToClipboard" /> 
    </Button.InputBindings> 
</Button> 

В вашем ViewModel определить следующий метод:

public void copyToClipboard() 
{ 
    System.Windows.Clipboard.SetData(DataFormats.Text, (Object)this.Name); 
} 

Затем назначьте copyToClipboard метод CopyToClipboard команды.

Смежные вопросы