2010-04-01 229 views
1

我在我的ViewModel/Datacontext中有一个字符串属性,并希望有一个简单的按钮将其内容复制到剪贴板。这是可能从XAML做到的,或者我需要处理按钮单击事件(或使用ICommand)来完成此操作?我想下面的工作,但我的按钮总是灰色的:将属性复制到剪贴板

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

回答

2

的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命令获取/设置你的ViewModel的MyStringProperty;说实话,我不知道该从哪里开始弄清楚这一点。也许在这里更聪明的人可以提供这个难题。

+0

感谢您的解释。根据你所说的话,通过代码处理它可能更容易,并且该按钮绑定到一个ICommand。 – 2010-04-02 13:28:17

+0

不要这样想。 Xaml更清洁。 – 2013-05-24 03:58:13