Как можно ограничить количество цифр в WPF c# - PullRequest
0 голосов
/ 15 апреля 2020

У меня на самом деле два вопроса, поэтому я начну с первого: я готовлюсь к проекту, над которым я работаю, и вижу, могу ли я ограничить диапазон символов в поле текстового поля. Это должны быть цифры и восемь символов. Не больше, не меньше. Есть ли способ, которым я могу это сделать. Потому что это не нравится, когда я использую строку .length и код, который я использовал при запуске, не будет отображать сообщение об ошибке. Вот моя попытка: (GUI не сложен. В нем есть текстовое поле для ввода идентификатора. Два текстовых блока - результат и сообщение об ошибке. Кнопка с надписью submit.) И Мой второй вопрос: как это сделать? Я храню идентификатор и отображаю его?

    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.";
        }
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Я создаю простую демонстрацию для вашей единственной необходимости: enter image description here

Вы можете создать текстовое поле в пользовательском интерфейсе с проверкой и MaxLength:

<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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...