Копирование и вставка команд с помощью кнопок WPF - PullRequest
3 голосов
/ 27 сентября 2011

Я создал панель инструментов с кнопками.

Из кнопок 3 из них вырезаны копирование и вставка.Я установил команду каждой из этих кнопок, чтобы вырезать и скопировать свойства, но когда я запускаю программу, ни одна из кнопок даже не нажимается.Я думаю, они инвалиды?Я пытаюсь скопировать и вставить из текстового поля в текстовое поле в tabcontrol.Любая помощь приветствуется.

<Style TargetType="{x:Type Button}" x:Key="textBoxCommands">
  <Setter Property="Content" 
          Value="{Binding RelativeSource={RelativeSource Self}, 
                          Path=Command.Text}" />
  <Setter Property="CommandTarget" 
          Value="{Binding ElementName=textBox}" />
</Style>

<Button x:Name="btnCut" 
        Click="btnCut_Click">
  <Image Source="Icons/Cut.png" ToolTip="Cut" />
</Button>
<Button x:Name="btnCopy" 
        Click="btnCopy_Click" 
        Command="ApplicationCommands.Copy"
        Style="{StaticResource textBoxCommands}">
  <Image Source="Icons/Copy.png" ToolTip="Copy" />
</Button>
<Button x:Name="btnPaste" 
        Click="btnPaste_Click" 
        Command="ApplicationCommands.Paste"
        Style="{StaticResource textBoxCommands}" > 
  <Image Source="Icons/Paste.png" ToolTip="Paste" />
</Button>

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

Вы не можете использовать команду таким образом!Команда (в том виде, в каком вы ее используете) должна быть внутри Menu или Toolbar.
Кстати, вам не нужен обработчик событий щелчка, так как вы собираетесь использовать команды!
Iрекомендуем вам попробовать добавить DelegateCommand к ViewModel и позволить этому делегату вызвать ApplicationCommads.

Я настоятельно рекомендую вам прочитать это http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Но в качестве быстрого решения для вас попробуйте следующее (важно: помните, что вам нужно выделить какой-то текст в вашем TextBox, а затем Copyи Cut будет включен):

<StackPanel  HorizontalAlignment="Left" VerticalAlignment="Top">

  <ToolBar>
    <Button Content="Cut" Command="ApplicationCommands.Cut" Height="23" Width="75"/>
    <Button Content="Copy" Command="ApplicationCommands.Copy" Height="23" Width="75"/>
    <Button Content="Paste" Command="ApplicationCommands.Paste" Height="23" Width="75"/>
  </ToolBar>

  <TextBox Height="23" Name="textBox1" Width="120"/>

</StackPanel>
0 голосов
/ 27 сентября 2011

Для цели, которую вы пытаетесь достичь, я бы предложил использовать тумблер.

Также кнопка будет активна, как и когда они должны. Например

  • Кнопка вставки становится активной только тогда, когда есть что вставить.
  • Кнопка «Вырезать / Копировать» становится активной, когда что-то выбрано в RTB.

Посмотрите на все ApplicationCommands в msdn. Вы можете реализовать их так же просто, как:

<ToggleButton x:Name="PasteBtn" Command="ApplicationCommands.Paste"/>
<ToggleButton x:Name="CutBtn"   Command="ApplicationCommands.Cut"/>
<ToggleButton x:Name="CopyBtn"  Command="ApplicationCommands.Copy"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...