2016-01-24 61 views
0

我有一個小UWP計算器應用程序,我想弄清楚如何將鍵盤號碼綁定到按鈕的單擊事件x:綁定。在下面的情況下,我將內容「7」傳遞給ViewModel中的按鈕RoutedEventArgs。理想情況下,我只需將鍵盤和數字鍵盤7綁定到XAML中的按鈕,而不需要單獨的事件處理程序。或者,我是否需要在事件處理程序後面使用代碼,該程序將數字綁定到ViewModel的事件處理程序?如何將keydown綁定到按鈕的單擊事件UWP?

<Button x:Name="SevenButton" 
     Grid.Row="4" 
     Grid.Column="2" 
     Content="7" 
     Click="{x:Bind ViewModel.OnNumberBtnClick}"></Button> 

//ViewModel 
public void OnNumberBtnClick(object sender, RoutedEventArgs args) 
{ 
    if ((_outputValue) == "0" || (isOperationPerformed)) 
     _outputValue = ""; 

    isOperationPerformed = false; 
    Button numberBtnClick = (Button)sender; 

    if ((string)numberBtnClick.Content == ".") 
    { 
     if (!_outputValue.Contains(".")) 
     { 
      OutputValue = OutputValue + numberBtnClick.Content; 
     } 
    } 
    else 
    { 
     OutputValue = OutputValue + numberBtnClick.Content; 
    } 
} 

//OnPropertyChanged 
public string OutputValue 
{ 
    get 
    { 
     return _outputValue; 
    } 
    set 
    { 
     _outputValue = value; 
     OnPropertyChanged("OutputValue"); 
    } 
} 

謝謝 馬克

所以,以下的一些RareNCool的建議後,這是我來了一下。還有一些問題需要解決,比如專注於文本框,但其他方面都有效。

在我看來,我只是增加了一個綁定到視圖模型KeyRoutedEventArgs事件:

 <TextBlock x:Name="OutputValueTextBlock" 
        IsTextSelectionEnabled="True" 
        KeyDown="{x:Bind ViewModel.OnKeyboardNumberInput, Mode=OneWay}" 
        Text="{x:Bind ViewModel.OutputValue, Mode=TwoWay}"></TextBlock>  

而在視圖模型我創造了這個事件:

public void OnKeyboardNumberInput(object sender, KeyRoutedEventArgs e) 
    { 
     if (e.Key == VirtualKey.Number0 || e.Key == VirtualKey.NumberPad0 || (isOperationPerformed)) 
      _outputValue = ""; 

     if ((e.Key > VirtualKey.Number0 || e.Key < VirtualKey.Number9) || (e.Key > VirtualKey.NumberPad0 || e.Key < VirtualKey.NumberPad9)) 
     { 
      string numberKey = e.Key.ToString(); 

      if (e.Key == VirtualKey.Decimal) 
      { 
       isOperationPerformed = false; 

       if (!_outputValue.Contains(".")) 
       { 
        // Switch if E.Key is a decimal and _output does not contains a decimal. 
        switch (numberKey) 
        { 
         case "Decimal": 
          numberKey = "."; 
          OutputValue = OutputValue + numberKey; 
          break; 
        } 
       } 
      } 
      else 
      { 
       // Swtich if E.Key is not a decimal. 
       switch (numberKey) 
       { 
        case "Number0": 
        case "NumberPad0": 
         numberKey = "0"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number1": 
        case "NumberPad1": 
         numberKey = "1"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number2": 
        case "NumberPad2": 
         numberKey = "2"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number3": 
        case "NumberPad3": 
         numberKey = "3"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number4": 
        case "NumberPad4": 
         numberKey = "4"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number5": 
        case "NumberPad5": 
         numberKey = "5"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number6": 
        case "NumberPad6": 
         numberKey = "6"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number7": 
        case "NumberPad7": 
         numberKey = "7"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number8": 
        case "NumberPad8": 
         numberKey = "8"; 
         OutputValue = OutputValue + numberKey; 
         break; 
        case "Number9": 
        case "NumberPad9": 
         numberKey = "9"; 
         OutputValue = OutputValue + numberKey; 
         break; 
       } 
      } 

     } 
    } 

回答

2

我把實際處理成與string參數分離功能,然後捕獲按鈕Click和事件並傳遞其內容。但是,如果您確實只想要一個函數,則可以將ClickKeyDown事件綁定到該函數,並將這兩個參數鍵入爲objects,然後使用typeof來確定您需要從中獲取哪些內容。

+0

我真的很苦惱與鍵盤輸入。一些示例代碼會非常有幫助。 –

+0

我已經採取了你的建議,並正在實施一個單獨的功能,但我正在努力解決三個問題。 1如何使用ViewModel進行連線。 2.如何將VirtualKey枚舉轉換爲字符串。 3如何在視圖中設置焦點。 –

+0

我已經創建了一個事件在視圖模型像這樣的:public void OnKeyboardNumberInput(對象發件人,KeyRoutedEventArgs E) { 如果(e.Key> VirtualKey.Number0 || VirtualKey.NumberPad0 || e.Key

相關問題