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;
}
}
}
}
我真的很苦惱與鍵盤輸入。一些示例代碼會非常有幫助。 –
我已經採取了你的建議,並正在實施一個單獨的功能,但我正在努力解決三個問題。 1如何使用ViewModel進行連線。 2.如何將VirtualKey枚舉轉換爲字符串。 3如何在視圖中設置焦點。 –
我已經創建了一個事件在視圖模型像這樣的:public void OnKeyboardNumberInput(對象發件人,KeyRoutedEventArgs E) { 如果(e.Key> VirtualKey.Number0 || VirtualKey.NumberPad0 || e.Key