我正在使用MahApps的NumericUpDown
控件,因为它的+/-按钮和设置最大/最小允许值的功能。我现在需要以某种方式限制字符的数量,可以输入到框中。
对于标准TextBox
,这将使用MaxLength
属性完成,但NumericUpDown
控件不存在此属性。
我错过了什么吗?还有其他方法可以达到这个目的吗?
答案 0 :(得分:2)
不,没有这样的属性,但您可以轻松扩展NumericUpDown并添加它。顺便说一句,当你集中注意力时,它会检查最大允许值和输入值。
<强> C#强>
using MahApps.Metro.Controls;
using System.Windows;
using System.Windows.Input;
namespace TestApp.Controls
{
class ExtendedNumericUpDown : NumericUpDown
{
public int MaxLenght
{
get { return (int)GetValue(MaxLenghtProperty); }
set { SetValue(MaxLenghtProperty, value); }
}
public static readonly DependencyProperty MaxLenghtProperty =
DependencyProperty.Register(nameof(MaxLenght), typeof(int), typeof(ExtendedNumericUpDown), new PropertyMetadata(10));
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
e.Handled = ((System.Windows.Controls.TextBox)e.OriginalSource).Text.Length >= MaxLenght;
base.OnPreviewTextInput(e);
}
}
}
<强> XAML 强>
<ctrl:ExtendedNumericUpDown Minimum="0" Maximum="100" MaxLenght="3"/>
答案 1 :(得分:1)
NumericUpDown
控件接受Maximum
和Minimum
个参数,
<Controls:NumericUpDown Minimum="0" Maximum="{Binding TotalPages}"/>
如果找不到它们,请尝试更新MahApps的NuGet包。
答案 2 :(得分:1)
以@Alex的答案为基础,您可以通过创建行为将其进一步向前。该行为可由许多不同类型的控件使用,并且您无需继承NumericUpDown
public class MaxCharactersBehavior : Behavior<UIElement>
{
public int MaxCharacters { get; set; }
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.PreviewTextInput += AssociatedObject_PreviewTextInput;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.PreviewTextInput -= AssociatedObject_PreviewTextInput;
}
private void AssociatedObject_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = ((System.Windows.Controls.TextBox)e.OriginalSource).Text.Length >= MaxCharacters;
}
}
<mah:NumericUpDown Width="150" Maximum="999" Minimum="0">
<i:Interaction.Behaviors>
<behaviors:MaxCharactersBehavior MaxCharacters="3" />
</i:Interaction.Behaviors>
</mah:NumericUpDown>