WPF TextBox限制只能输入数字的两种方法
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF TextBox限制只能输入数字的两种方法相关的知识,希望对你有一定的参考价值。
文本框中只能输入数字,一个常见的功能喽,今天就来看看如何实现它~
下面就看看代码
思路都写在xaml里面了,
MainWindow.xaml:
<Window x:Class="wpfcore.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:wpfcore"
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
mc:Ignorable="d"
Background="#2D2D30"
SnapsToDevicePixels="True"
FontSize="18"
UseLayoutRounding="True"
Title="MainWindow" Width="820" Height="340">
<StackPanel>
<!--第一种方法,直接设置禁用输入法,并添加PreviewTextInput事件,如果不满足条件,就禁止输入-->
<TextBox InputMethod.IsInputMethodEnabled="False" PreviewTextInput="TextBox_PreviewTextInput" Margin="10"/>
<!--第二种方法,写一个附加属性,在属性改变时,给textbox添加上相应事件,这个写完后,复用时就方便喽-->
<TextBox local:TextBoxAttachedProperties.IsOnlyNumber="true" Margin="10"/>
</StackPanel>
</Window>
MainWindow.cs:
using System.Text.RegularExpressions;
using System.Windows;
namespace wpfcore
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void TextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
e.Handled = new Regex("[^0-9]+").IsMatch(e.Text);
}
}
}
第二种方法:
新建一个TextBoxAttachedProperties.cs文件,定义附加属性:
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace wpfcore
{
public class TextBoxAttachedProperties
{
public static bool GetIsOnlyNumber(DependencyObject obj)
{
return (bool)obj.GetValue(IsOnlyNumberProperty);
}
public static void SetIsOnlyNumber(DependencyObject obj, bool value)
{
obj.SetValue(IsOnlyNumberProperty, value);
}
public static readonly DependencyProperty IsOnlyNumberProperty =
DependencyProperty.RegisterAttached("IsOnlyNumber", typeof(bool), typeof(TextBox), new PropertyMetadata(false,
(s, e) =>
{
if (s is TextBox textBox)
{
textBox.SetValue(InputMethod.IsInputMethodEnabledProperty, !(bool)e.NewValue);
textBox.PreviewTextInput -= TxtInput;
if (!(bool)e.NewValue)
{
textBox.PreviewTextInput += TxtInput;
}
}
}));
private static void TxtInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
e.Handled = new Regex("[^0-9]+").IsMatch(e.Text);
}
}
}
ok,结束喽
如果喜欢,点个赞呗~
以上是关于WPF TextBox限制只能输入数字的两种方法的主要内容,如果未能解决你的问题,请参考以下文章
WPF中TextBox只能输入正数或者负数和只能输入一个小数点?