繁体   English   中英

如何限制 WPF c# 中的数字字符数量

[英]How can I limit the amount of number characters in WPF c#

我实际上有两个问题,所以我先从第一个开始:我正在为我正在处理的项目做准备,看看我是否可以限制文本框字段中的字符范围。 它必须都是数字,并且必须是八个字符。 不多不少。 有什么办法我可以做到这一点。 因为它不喜欢我使用 .length 行的时候,而且我运行时使用的代码不会显示错误信息。 这是我的尝试:(GUI并不复杂。它有一个用于输入ID的文本框。两个文本块是结果和错误消息。有一个按钮说提交。)我的第二个问题是如何存储ID和显示呢?

    public partial class MainWindow : Window
{
    int range;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void sub_Click(object sender, RoutedEventArgs e)
    {
        range = int.Parse(Type.Text);

        while (range>0 || range < 8)
        {
            Error.Text = "ID must be eight characters long.";
        }
    }
}

我为您的需要创建了一个简单的演示: 在此处输入图像描述

您可以使用 Validation 和 MaxLength 在 UI 中创建文本框:

<TextBox Name="txtMyLength"
             MaxLength="8"
             Width="200"
             Margin="140"
             HorizontalAlignment="Left"
             VerticalAlignment="Center"
             Text="{Binding validModel.MyLength, ValidatesOnDataErrors=True}" />

然后为错误提示设置 TextBox 的样式:

<Style TargetType="TextBox">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Border BorderThickness="1" BorderBrush="Red" VerticalAlignment="Top">
                            <Grid>
                                <AdornedElementPlaceholder x:Name="adorner" Margin="-1"/>
                            </Grid>
                        </Border>
                        <Border x:Name="errorBorder" Background="Red" Margin="8,0,0,0"
                            Opacity="0" CornerRadius="0"
                            IsHitTestVisible="False"
                            MinHeight="24" >
                            <TextBlock Text="{Binding ElementName=adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                   Foreground="Black" Margin="8,3,8,3" TextWrapping="Wrap" VerticalAlignment="Center"/>
                        </Border>
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <DataTrigger Value="True">
                            <DataTrigger.Binding>
                                ......
                            </DataTrigger.Binding>
                            <DataTrigger.EnterActions>
                                <BeginStoryboard x:Name="in">
                                    <Storyboard>
                                      ......
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <StopStoryboard BeginStoryboardName="in"/>
                                <BeginStoryboard x:Name="out">
                                    .......
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在 ValidModel 中创建条件,例如

public string this[string columnName]
        {
        get
        {
            int txtLength = 0;
            string result = string.Empty;
            if (MyLength != "" && MyLength != null)
            {
                txtLength = MyLength.ToString().Length;
                                }
            switch (columnName)
            {
                case "MyLength": if (txtLength != 8 ) result = "ID be 8 numbers"; break;
                case .......
            };
            return result;
        }

您可以 select 任何文本框的最大长度属性:

YourTextBox.MaxLength = 50;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM