2010-03-27 2 views
3

표준 잘라 내기, 복사 및 붙여 넣기 명령 (ApplicationCommands 클래스의 일부)을 사용합니다. CanExecute 메서드를 다시 정의 할 수 있습니까?WPF : ApplicationCommands의 CanExecute 메서드를 다시 정의하는 방법

여기 내 코드입니다 :

XAML :

<Window.CommandBindings> 
     <CommandBinding Command="Copy" 
       CanExecute="CopyCanExecute" Executed="CopyExecuted"/>  
    </Window.CommandBindings> 

    <StackPanel> 
     <TextBox Name="txt"></TextBox> 
     <Button Command="Copy" CommandTarget="{Binding ElementName=txt}">copy</Button> 
    </StackPanel> 

코드 숨김의 명령은 표준 복사 명령은 다음과 같은

private void CopyCanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = false; 
} 

private void CopyExecuted(object sender, ExecutedRoutedEventArgs e) 
{ 
    MessageBox.Show("Copy Executed"); 
} 

이 버튼은 여전히 ​​작동합니다.

답변

1

CommandBinding을 통해 확인하십시오. 로컬 CommandBinding은 CanExecuteHandler를 지정할 수 있습니다.

자세한 내용과 작동 예는 this blog post을 참조하십시오.

+0

Copy \ Cut \ Paste (도움말 명령 사용 예제)가 제대로 작동하지 않는 이유를 알 수 없습니다. CommandBinding을 복사하여 CanExecute를 정의하여 false를 반환하도록 지정합니다. 코드 숨김 파일에서 e.CanExecute = false. 그러나 Copy는 여전히 표준 복사 명령과 같이 작동합니다. TextBox에서 텍스트를 선택하면 버튼이 활성화됩니다. 이 문제를 이해하도록 도와 주시겠습니까? – Nike

+0

코드를 표시하면 도움을 줄 수 있습니다. –

+0

질문에 내 코드를 추가하십시오 – Nike

0

CanExecute 처리기에서 'e.Handled = true; 또한, 그것은 이동하지 않고 표준을 실행합니다 .CanExecute()

+0

e.Handled = true는 이에 영향을주지 않습니다. 또한 e.CanExecute = true를 변경했지만 버튼을 클릭하면 선택한 텍스트가 복사되고 MessageBox는 표시되지 않습니다. – Nike

1

명령이 이미 처리되었지만 CheckBox 등의 요소에서 작동하는 텍스트 상자에 포커스가있는 경우 복사 명령이 작동하지 않습니다