设置MahApps NumericUpDown控件的最大字符数

时间:2016-11-09 15:54:55

标签: wpf mahapps.metro numericupdown

我正在使用MahApps的NumericUpDown控件,因为它的+/-按钮和设置最大/最小允许值的功能。我现在需要以某种方式限制字符的数量,可以输入到框中。

对于标准TextBox,这将使用MaxLength属性完成,但NumericUpDown控件不存在此属性。

我错过了什么吗?还有其他方法可以达到这个目的吗?

3 个答案:

答案 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控件接受MaximumMinimum个参数,

<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>