您知道如何在文本框中限制用户输入,此文本框只接受整数吗?顺便说一下,我正在为Windows 8开发。我尝试过从SO和谷歌搜索的内容,但它没有用,
答案 0 :(得分:6)
如果您不想下载WPF ToolKit(同时包含IntegerUpDown控件或MaskedTextBox),您可以使用Masked TextBox In WPF在UIElement.PreviewTextInput
上自行实现本文的改编。 DataObject.Pasting
事件。
以下是您要放在窗口中的内容:
<Window x:Class="WpfApp1.MainWindow" Title="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Vertical" Width="100" Height="100" HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock Name="NumericLabel1" Text="Enter Value:" />
<TextBox Name="NumericInput1"
PreviewTextInput="MaskNumericInput"
DataObject.Pasting="MaskNumericPaste" />
</StackPanel>
</Window>
然后在代码隐藏中实现C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MaskNumericInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !TextIsNumeric(e.Text);
}
private void MaskNumericPaste(object sender, DataObjectPastingEventArgs e)
{
if (e.DataObject.GetDataPresent(typeof(string)))
{
string input = (string)e.DataObject.GetData(typeof(string));
if (!TextIsNumeric(input)) e.CancelCommand();
}
else
{
e.CancelCommand();
}
}
private bool TextIsNumeric(string input)
{
return input.All(c => Char.IsDigit(c) || Char.IsControl(c));
}
}
答案 1 :(得分:6)
public class IntegerTextBox : TextBox
{
protected override void OnTextChanged(TextChangedEventArgs e)
{
base.OnTextChanged(e);
Text = new String(Text.Where(c => Char.IsDigit(c)).ToArray());
this.SelectionStart = Text.Length;
}
}
答案 2 :(得分:1)
在最原始级别,您可以截取KeyUp
事件或TextChanged
以查看正在添加的字符,如果无法将其解析为Int,则将其删除。
同时检查 - Only accept digits for textbox 和Masking Textbox to accept only decimals
答案 3 :(得分:0)
您可以使用整数向下控制。 WPF工具包中有一个可以解决这个问题:
https://wpftoolkit.codeplex.com/wikipage?title=IntegerUpDown