tutorial - wpf란




WPF의 키보드 단축키 (6)

그것은 당신이 그것들을 사용하길 원하는지에 달려 있습니다. TextBoxBase 파생 컨트롤은 이미 이러한 바로 가기를 구현합니다. 사용자 정의 키보드 단축키를 사용하려면 명령 및 입력 제스처를 살펴야합니다. Switch on the Code의 작은 자습서입니다. WPF 자습서 - 명령 바인딩 및 사용자 지정 명령

희망이 도움이됩니다.

내가 & 대신에 &를 사용하는 것에 대해 알고 있는데, 내가보고있는 것은 모든 Ctrl + 유형 바로 가기입니다.

실행 취소를위한 Ctrl + Z , 저장을위한 Ctrl + S

WPF 응용 프로그램에서이를 구현하기위한 '표준'방법이 있습니까? 또는 자신의 역할을 맡아서 어떤 명령 / 제어 장치에 연결시킬 수 있습니까?


명령을 MenuItem 과 연결하는 방법 :

<MenuItem Header="My command" Command="{x:Static local:MyWindow.MyCommand}"/>

이 작업을 수행하는 훨씬 간단한 방법이 있으므로 거의 대답하지 않고 XAML을 전혀 건드릴 필요가 없으므로 다른 사람들을 위해이 대답을 문서화하십시오.

키보드 단축키를 연결하려면 Window 생성자에서 새 KeyBinding을 InputBindings 컬렉션에 추가하기 만하면됩니다. 명령으로 ICommand를 구현하는 임의의 명령 클래스를 전달하십시오. execute 메소드의 경우 필요한 논리를 구현하면됩니다. 아래 예제에서 WindowCommand 클래스는 호출 될 때마다 실행되는 델리게이트를 사용합니다. 내 바인딩으로 전달할 새 WindowCommand를 생성 할 때 WindowCommand를 실행하기 원하는 메서드를 내 이니셜 라이저에 표시하기 만하면됩니다.

이 패턴을 사용하여 단축 키보드 단축키를 만들 수 있습니다.

public YourWindow() //inside any WPF Window constructor
{
   ...
   //add this one statement to bind a new keyboard command shortcut
   InputBindings.Add(new KeyBinding( //add a new key-binding, and pass in your command object instance which contains the Execute method which WPF will execute
      new WindowCommand(this)
      {
         ExecuteDelegate = TogglePause //REPLACE TogglePause with your method delegate
      }, new KeyGesture(Key.P, ModifierKeys.Control)));
   ...
}

실행 위임자를 사용하여 설정된 모든 메서드를 시작하는 간단한 WindowCommand 클래스를 만듭니다.

public class WindowCommand : ICommand
{
    private MainWindow _window;

    //Set this delegate when you initialize a new object. This is the method the command will execute. You can also change this delegate type if you need to.
    public Action ExecuteDelegate { get; set; }

    //You don't have to add a parameter that takes a constructor. I've just added one in case I need access to the window directly.
    public WindowCommand(MainWindow window)
    {
        _window = window;
    }

    //always called before executing the command, mine just always returns true
    public bool CanExecute(object parameter)
    {
        return true; //mine always returns true, yours can use a new CanExecute delegate, or add custom logic to this method instead.
    }

    public event EventHandler CanExecuteChanged; //i'm not using this, but it's required by the interface

    //the important method that executes the actual command logic
    public void Execute(object parameter)
    {
        if (ExecuteDelegate != null)
        {
            ExecuteDelegate();
        }
        else
        {
            throw new InvalidOperationException();
        }
    }
}


표준 방법은 명령을 작성한 다음 단축키를 InputGestures로 추가하는 것입니다. 이렇게하면 바로 가기 키가 모든 컨트롤에 연결되지 않아도 작동 할 수 있습니다. 메뉴 항목은 키보드 제스처를 이해하기 때문에 해당 명령을 메뉴 항목에 연결하면 바로 가기 키가 메뉴 항목 텍스트에 자동으로 표시됩니다.

A. 명령을 보관할 정적 속성을 만듭니다 (명령에 대해 만드는 정적 클래스의 속성과 같음). 그러나 간단한 예제의 경우 창 .cs의 정적 특성 만 사용하십시오.

public static RoutedCommand MyCommand = new RoutedCommand( );

B. 메서드를 호출해야하는 바로 가기 키를 추가합니다.

MyCommand.InputGestures.Add( new KeyGesture( Key.S , ModifierKeys.Control ));

C. 실행할 때 호출 할 메서드를 가리키는 명령 바인딩을 만듭니다.이 메서드 바인딩은 UI 요소의 명령 바인딩 (예 : 창) 및 메서드에 사용할 바인딩에 넣습니다.

<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:MyWindow.MyCommand}" Executed="MyCommandExecuted"/>
</Window.CommandBindings>

private void MyCommandExecuted( object sender, ExecutedRoutedEventArgs e ) { ... }

VB.Net :

Public Shared SaveCommand_AltS As New RoutedCommand

로드 된 이벤트 내부 :

SaveCommand_AltS.InputGestures.Add(New KeyGesture(Key.S, ModifierKeys.Control))

Me.CommandBindings.Add(New CommandBinding(SaveCommand_AltS, AddressOf Me.save))

xaml 필요 없음.

희망이 도움이됩니다.





keyboard-shortcuts