none
virtualkey code값의 assign 관련한 질문입니다. RRS feed

  • 질문

  • 안녕하세요. 

    mvvm 학습을 위한 간단한 계산기 앱을 구현 중인데, 키보드 값 할당 관련해서 막히는 점이 있어 질문합니다.

    먼저 xaml에서 코드를 다음과 같이 구현해서 키보드 값을 할당하였습니다. (backspace 키를 사용하기 위한 키값 할당입니다)

    <Button Grid.Row="0" Content="BKSP" Command="{Binding InputCommand}" CommandParameter="Back">
                        <Button.KeyboardAccelerators>
                            <KeyboardAccelerator Key="Back"/>
                        </Button.KeyboardAccelerators>
    </Button>

    다음 viewmodel 코드에서 다음과 같이 키를 호출하였습니다.

     private void ExecuteInputCommand(object obj)
            {
                if (!(obj is string number)) return;
    
                if (string.IsNullOrEmpty(InputNumbers))
                {
    
                }
    
                var num = double.Parse(InputNumbers.Replace(",", ""));
    
                switch (number)
                {
                    case "C":
                        num = 0;
                        break;
                    case "Back":
                        num = num.ToString().Length == 1 ? 0 : double.Parse(num.ToString().Remove(num.ToString().Length - 1, 1));
                        break;
                    default:
                        num = double.Parse(num + number);
                        break;
                }
    
                InputNumbers = string.Format("{0:N0}", num);
            }
    이 코드를 실행하면 backspace 키가 먹어야 하는데 먹통이 되고, B키로 할당하면 되더군요. 무엇이 잘못되었는지 지적을 부탁드립니다.

    2018년 9월 10일 월요일 오전 10:03

모든 응답

  • 어느 곳에도 문서화 된 것이 없어서 확인을 못 하겠습니다만 감지가 전혀 안 되는 것으로 보아서 백스페이스는 따로 관리 되는 것 같아 보입니다. 이것은 내부적으로 확인해보고 다시 답글을 달겠습니다. 

    공부하시는 것이 목적이므로 일단 이 키는 그냥 그리드 컨트롤에 대해 KeyDown 이벤트에서 VirtualKey.Back을 인식하여 처리하는 것으로 하시고, 다른 키들을 먼저 처리하시는 것이 어떨는지요 :)

    2018년 9월 11일 화요일 오전 5:42
  • backspace 키도 문제지만 "=" 키를 assign하는 것도 문제네요.... 이걸 어찌해야 하는지... 문서를 찾아봐도 뾰족한 수가 안 보이네요.
    2018년 9월 13일 목요일 오전 11:33
  • 다른 일반 키들과 같은 방식으로 처리하는 방법은 확인되는 것이 없네요.

    '='는 Windows의 기본 계산기 기준으로 Enter 키로 처리하는 것 같은데, Backspace와 Enter 키 둘 다 포커스 문제라던가 선점되어 있는 이슈가 있는 것으로 보입니다. 진도는 나가셔야 하니까 이 키들은 일단 KeyDown이벤트 핸들러로 우회를 하시는 것이 좋을 것 같습니다.

    2018년 9월 21일 금요일 오전 9:50