0
我和許多人一樣需要在WPF中創建一個數字文本框控件。到目前爲止,我已經取得了很好的進展,但我不確定下一步採取什麼正確的方法。如何強制子文本文本框的值?
作爲控件規範的一部分,它必須總是顯示一個數字。如果用戶突出顯示所有文本並點擊退格或刪除,我需要確保該值設置爲零,而不是「空白」。我應該如何在WPF控件模型中執行此操作?
我迄今(略):
public class PositiveIntegerTextBox : TextBox
{
protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
{
// Ensure typed characters are numeric
}
protected override void OnPreviewDrop(DragEventArgs e)
{
// Ensure the dropped text is numeric.
}
protected override void OnTextChanged(TextChangedEventArgs e)
{
if (this.Text == string.Empty)
{
this.Text = "0";
// Setting the Text will fire OnTextChanged again--
// Set Handled so all the other handlers only get called once.
e.Handled = true;
}
base.OnTextChanged(e);
}
private void HandlePreviewExecutedHandler(object sender, ExecutedRoutedEventArgs e)
{
// If something's being pasted, make sure it's numeric
}
}
,一方面,這很簡單,似乎工作確定。我不確定這是否正確,因爲我們總是(如果有的話)簡短地將文本設置爲空白,然後將其重置爲零。沒有PreviewTextChanged事件可以讓我在改變它之前操縱它,所以這是我最好的猜測。
它是正確的嗎?
不幸的是,這並不那麼簡單。 OnPreviewTextInput僅在文本輸入時觸發。如果輕擊空格鍵,則不會觸發,例如,或者如果選擇了文字並輕擊刪除或退格鍵。 – 2010-11-11 15:00:08
然後,您可以根據需要吞下原始的按鍵筆畫...您是否檢查過此... http://msdn.microsoft.com/en-us/library/ms229644(VS.80).aspx – 2010-11-11 15:04:23
是啊,但感謝鏈接都一樣。 :)幸運的是,我的特定場景允許將我的框限制爲PositiveIntegerTextBox。如果我不得不支持小數/負數,我必須去那裏。 (根據我的情況,在粘貼和拖放的完整場景中,事情變得非常醜陋)。 – 2010-11-11 15:12:38