2012-10-06 73 views
0

我在我的應用程序中有複製粘貼按鈕。最初,這兩個按鈕都必須禁用,如果我從任何文本框中選擇任何文本,則只需要啓用複製按鈕。一旦我複製了某些內容,就需要啓用粘貼按鈕。我在App.xaml.cs文件中使用此代碼:WPF複製按鈕問題

我的問題是,我怎麼會知道我什麼時候必須啓用此按鈕,如果我在CanCmdCopy函數中查找,如果我選擇了任何文本?

#region CopyCommand 
    private void CmdCopy(object sender, ExecutedRoutedEventArgs args) 
    { 
     // code/// 
    } 
    private void CanCmdCopy(object sender, CanExecuteRoutedEventArgs args) 
    { 
     args.CanExecute = ????? 
    } 
    #endregion 

感謝

回答

2

您應該使用默認ApplicationCommands,他們將有您正在尋找的行爲。如果您使用的是ToolBar,它將無需執行任何其他操作,否則您將不得不使用FocusManager.IsFocusScope屬性或直接綁定CommandTarget。注意,如果剪貼板中有任何內容,粘貼按鈕將被啓用。您可以使用ClipBoard.Clear方法來重置剪貼板。

即:

實施例1

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <StackPanel > 
    <ToolBar> 
     <Button Command="ApplicationCommands.Copy">Copy</Button> 
     <Button Command="ApplicationCommands.Paste">Paste</Button> 
    </ToolBar> 
    <TextBox BorderBrush="Black" BorderThickness="2" Margin="5" TextWrapping="Wrap" /> 
    <TextBox BorderBrush="Black" BorderThickness="2" Margin="5" TextWrapping="Wrap" /> 

    </StackPanel > 

</Window> 

實施例2

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <StackPanel > 
     <TextBox BorderBrush="Black" BorderThickness="2" Margin="5" TextWrapping="Wrap" /> 
     <TextBox BorderBrush="Black" BorderThickness="2" Margin="5" TextWrapping="Wrap" /> 
     <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" FocusManager.IsFocusScope="True" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button Grid.Column="0" Height="50" Command="ApplicationCommands.Copy" >Copy</Button> 
      <Button Grid.Column="1" Height="50" Command="ApplicationCommands.Paste">Paste</Button> 
     </Grid > 
    </StackPanel > 
</Window>