Форматированные текстовые поля для UWP - PullRequest
0 голосов
/ 24 мая 2018

Мне было интересно, есть ли у кого-нибудь рекомендации о том, как я могу отформатировать текстовое поле для ввода времени (чч: мм: сс), а также координат в градусах, минутах, секундах (дд ° мм'сс "). Я в порядкеПомните, что вы можете установить формат строки с помощью метода String.Format () .... это дает мне желаемую разметку в текстовом поле, но я хочу элемент управления, который имеет соответствующие символы, заблокированные и будет автоматически помечать этисимволы, которые пользователь вводит.

Я некоторое время безуспешно искал способ сделать это в C # / UWP, если у кого-нибудь есть какие-либо предложения или он может указать мне правильное направление, это будетс благодарностью.

1 Ответ

0 голосов
/ 25 мая 2018

UWP Community Toolkit имеет несколько очень хороших элементов управления, которые легко интегрировать, и одним из них является TextBox Mask , который идеально подходит для вашего сценария.

Вы также можете попробовать элемент управления TextBoxRegex , который не является тихим, что вы хотите, но на самом деле это то, что вы должны проверить, прежде чем продолжить.

Пожалуйста, обратитесь, если вывозникают трудности с интеграцией элемента управления для ваших конкретных требований.


При желании вы можете загрузить образец приложения для набора инструментов UWP, чтобы узнать обо всех доступных элементах управления / инструментах.( Пример приложения UWP Community Toolkit )


РЕДАКТИРОВАТЬ 1: Как вы могли заметить, поведение по умолчанию для tab состоит в том, что оно устанавливает фокус на следующий элемент управления.Таким образом, использование одного элемента управления не будет идеальным, поскольку при нажатии tab текстовое поле теряет фокус, и вам необходимо обновить текст и вернуть фокус обратно к текстовому полю.

Относительно более простым способом было бы следующее:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="1">
                <StackPanel.BorderBrush>
                    <SolidColorBrush Color="{ThemeResource SystemBaseHighColor}"/>
                </StackPanel.BorderBrush>
                <TextBox x:Name="hour" MaxLength="2" BorderBrush="{x:Null}" VerticalAlignment="Center" HorizontalAlignment="Center" LostFocus="hour_LostFocus"></TextBox>
                <TextBlock Text=":" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                <TextBox x:Name="minute" MaxLength="2" BorderBrush="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center" LostFocus="minute_LostFocus"></TextBox>
                <TextBlock Text=":" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                <TextBox x:Name="second" MaxLength="2" BorderBrush="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center" LostFocus="second_LostFocus"></TextBox>
</StackPanel>

Custom control

Это в основном ваш пользовательский элемент управления сборки / пользовательский контроль.Таким образом, когда пользователь выходит из панели, он перемещается к следующему текстовому полю внутри панели стека и т. Д.

В вашем событии hour_LostFocus вы можете проверить текущее значение текстового поля и добавить 0 и выполнить другие проверки.

private void hour_LostFocus(object sender, RoutedEventArgs e)
{            
            string val = (sender as TextBox).Text;

            Regex regex = new Regex(@"^([0[0-9]|1[0-9]|2[0-3])$");
            Match match = regex.Match(val);

            if (!match.Success)
            {
                //append 0 and other validations
            }            

}

То же самое относится к минутам и секундам ... просто в этих случаях регулярное выражение будет другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...