我的ViewModel / Datacontext中有一个字符串属性,并且需要一个简单的按钮将其内容复制到剪贴板。这是可以从XAML做的,或者我是否需要处理按钮单击事件(或使用ICommand)来完成此操作?我认为以下方法可行,但我的按钮总是灰色的:
<Button Width="100" Content="Copy" Command="ApplicationCommands.Copy"
CommandTarget="{Binding MyStringProperty}"/>
答案 0 :(得分:2)
ApplicationCommands期望位于工具栏或菜单中,这将根据RoutedUICommands为他们提供FocusScope。如果您的按钮位于工具栏或菜单之外,则需要明确声明焦点范围:
<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;说实话,我不知道从哪里开始想出那个。也许在这里更聪明的人可以提供这个难题。