Перейти к содержанию

Числовые маски

Тип маски Numeric позволяет пользователям вводить числовые значения (целые, вещественные значения, валюту, проценты и т. д.) в редакторах в соответствии с заданной маской ввода. Маску ввода также можно использовать для форматирования числовых значений в режиме отображения (когда редактирование текста не активно). У контрола SpinEditor тип маски Numeric включён по умолчанию. Чтобы включить этот тип маски для других текстовых редакторов, установите свойство редактора TextEditor.MaskType в Numeric.

Используйте свойство редактора Mask, чтобы задать маску ввода. Маска ввода — это строка, определяющая шаблон, по которому числовое значение вводится или форматируется.

Текущая культура влияет на большинство числовых масок. Например, культура определяет символ валюты и десятичный разделитель. Вы можете принудительно назначить маске конкретную культуру с помощью свойства TextEditor.MaskCulture.

Редакторы Eremex поддерживают стандартные и пользовательские числовые маски.

Стандартные маски

Стандартные числовые маски, поддерживаемые редакторами Eremex, соответствуют наиболее распространённым стандартным числовым форматам отображения, которые вы можете использовать для форматирования значений в .NET.

Пример

Следующий код применяет маску p1 к SpinEditor. Маска p форматирует значение редактора как процент. Суффикс 1 (спецификатор точности) определяет число цифр справа от десятичной точки.

xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"

<mxe:SpinEditor x:Name="SpinEditor" Width="200" Value="0.3" Mask="p1" Increment="0.005"/>

spineditor-standardmask-p1-example

Стандартные спецификаторы маски

Стандартная числовая маска состоит из одного стандартного спецификатора маски и необязательного спецификатора точности (целочисленного значения). Спецификатор точности влияет на число цифр в итоговой строке.

Таблица ниже показывает доступные стандартные спецификаторы маски.

Спецификатор маски Описание Пример
C или c Валюта.

Спецификатор точности определяет число десятичных цифр справа от десятичной точки.
12.54("c",ru-RU)→"12,54 ₽"

71.85("c0",zh-CN)→"¥72"
D или d Десятичные (целые) числа.

Спецификатор точности определяет минимальное число цифр.
789("D")→"789"

-965("D5")→"-00965"
F или f

G или g
Числа с фиксированной точкой.

Спецификатор точности определяет число десятичных цифр. Спецификатор точности по умолчанию задаётся CultureInfo.NumberFormatInfo.NumberDecimalDigits.
1234.5678("F",ru-RU)→"1234,57"

1234.56("F4",hi-IN)→"-1234.5600"
N или n Вещественные числа с групповыми разделителями.

Спецификатор точности определяет число десятичных цифр. Спецификатор точности по умолчанию задаётся CultureInfo.NumberFormatInfo.NumberDecimalDigits.
1234.5678("N",ru-RU)→"1 234,57"

-1234.56("N3",en-US)→"-1,234.560"
P Число отображается как есть с символом процента в соответствии с системным шаблоном.

Системный шаблон задаётся свойствами CultureInfo.NumberFormatInfo.PercentNegativePattern и CultureInfo.NumberFormatInfo.PercentPositivePattern.

Спецификатор точности определяет число десятичных цифр. Спецификатор точности по умолчанию задаётся CultureInfo.NumberFormatInfo.PercentDecimalDigits.
12("P",zh-CN)→"12.00%"

-15.6("P0",ru-RU)→"-16 %"
p Когда базовое число собирается отобразиться, оно умножается на 100 и отображается с символом процента в соответствии с системным шаблоном. Когда число вводится в редакторе, обратное преобразование делит число на 100 и сохраняет его в значении редактирования.

Системный шаблон задаётся свойствами CultureInfo.NumberFormatInfo.PercentNegativePattern и CultureInfo.NumberFormatInfo.PercentPositivePattern.

Спецификатор точности определяет число десятичных цифр (спецификатор точности по умолчанию задаётся CultureInfo.NumberFormatInfo.PercentDecimalDigits).
12("p",en-US)→"1,200.00%"

-0.2567("P0",ru-RU)→"-26 %"

Пользовательские маски

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

Пример

Следующий код применяет пользовательскую маску #,##0.## к SpinEditor. Маска позволяет пользователям вводить вещественные числа в диапазоне от -9999.99 до 9999.99. Свойства редактора Minimum и Maximum ограничивают диапазон до [0;5000].

Спецификатор маски , используется для вставки локализованных разделителей между группами из трёх цифр.

spineditor-custommask-example

xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"

<mxe:SpinEditor x:Name="SpinEditor" Value="1234.5" Mask="#,##0.##" Minimum="0" Maximum="5000" Increment="0.5"/>

Пользовательские спецификаторы маски

Следующая таблица показывает поддерживаемые пользовательские спецификаторы маски.

Спецификатор маски Описание Пример
0 Заполнитель-ноль для цифры (0-9). Этот заполнитель отображает "0", когда в этой позиции нет цифры. -12.345("0000")→"-0012"

78.97("000.0", ru-RU)→"079,0"
# Заполнитель цифры. Этот заполнитель ничего не отображает, когда в этой позиции нет цифры. 12.34("####")→"12"

-0.123("####.##",ru-RU)→"-,12"
. Десятичная точка. Задаёт местоположение десятичной точки в итоговой строке.

Свойство CultureInfo.NumberFormatInfo.NumberDecimalSeparator определяет символ, используемый как десятичный разделитель в текущей культуре.
0.9876("0.00",zh-CN)→0.99

0.01("####0.#")→"0"
, Групповой разделитель. Вы можете разместить групповой разделитель в любой позиции внутри маски, чтобы разделять группы цифр слева от десятичной точки локализованным символом группового разделителя.

Свойство CultureInfo.NumberFormatInfo.NumberGroupSeparator задаёт символ группового разделителя по умолчанию. Свойство CultureInfo.NumberFormatInfo.NumberGroupSizes задаёт число цифр в каждой группе по умолчанию.

Если маска содержит символ "%" (см. ниже), свойства CultureInfo.NumberFormatInfo.PercentGroupSeparator и CultureInfo.NumberFormatInfo.PercentGroupSizes задают групповой разделитель и длину группы соответственно.

Если маска содержит символ "$" (см. ниже), вместо них используются свойства CultureInfo.NumberFormatInfo.CurrencyGroupSeparator и CultureInfo.NumberFormatInfo.CurrencyGroupSizes.
12345678.91("#,########.#",en-US)→"12,345,678.9"
% Процент. Когда базовое число собирается отобразиться, оно умножается на 100 и отображается с символом процента. Когда число вводится в редакторе, обратное преобразование делит число на 100 и сохраняет его в значении редактирования.

Спецификатор % определяет позицию локализованного символа процента (CultureInfo.NumberFormat.PercentSymbol) в итоговой строке.
0.31415("% ##0.00",en-US)→"% 31.41"

0.5567("##.0 %",ru-RU)→"55,7 %"
%% Символ процента. Отображает значение как есть и добавляет локализованный символ процента (CultureInfo.NumberFormat.PercentSymbol) в итоговую строку в заданной позиции. 0.31415("%% ##0.00",en-US)→"% 0.31"

0.1256("#0.00 %%",ru-RU)→"0,13 %"
\ Экранирующий символ. Символ, следующий за экранирующим символом, интерпретируется как литерал, а не как спецификатор маски. Используйте "\\", чтобы вставить символ обратной косой черты как литерал. 123456("\#########\#")→"#123456#"
; Разделитель для секций, определяющих маски для положительных и отрицательных чисел.

Секция до символа ; задаёт маску для положительных чисел. Секция после символа ; задаёт маску для отрицательных чисел. Если секция для отрицательных чисел пуста, пользователь не может вводить отрицательные значения.
10.25("#0.##;(#0.##)", en-US)→"10.25"

-10.25("#0.##;(#0.##)", en-US)→"(10.25)"
$ Символ валюты. Вставляет символ валюты (CultureInfo.NumberFormatInfo.CurrencySymbol) в заданной позиции. 35("###0 $",zh-CN)→"35 ¥"
Все другие символы Эти символы отображаются как есть, в режиме «только для чтения». Они не сохраняются в значении редактирования редактора. 36.6("#0.## °",hi-IN)→"36.6 °"

Настройки числовой маски

Вы можете настраивать поведение числовой маски с помощью дополнительных настроек. Эти настройки доступны из присоединённых свойств, предоставляемых классом Eremex.AvaloniaUI.Controls.Editors.NumericMaskOptions.

Автоматическое скрытие десятичного разделителя

Свойство NumericMaskOptions.AutoHideDecimalSeparator задаёт, скрывать или показывать десятичный разделитель, когда у текущего числа нет дробной части.

editors-masks-numeric-autohidedecimalseparator

Пример

Следующий пример предотвращает скрытие десятичного разделителя.

xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"

<mxe:TextEditor Name="textEditor1" MaskType="Numeric" Mask="####0.#" mxe:NumericMaskOptions.AutoHideDecimalSeparator="False"/>

Следующий код устанавливает свойство AutoHideDecimalSeparator в code-behind:

textEditor1.MaskType = Eremex.AvaloniaUI.Controls.Editors.MaskType.Numeric;
textEditor1.Mask = "##0.##";
textEditor1.SetValue(NumericMaskOptions.AutoHideDecimalSeparatorProperty, false);

Показ "0" или ничего для нулевых значений

Спецификатор маски '#' задаёт заполнитель, который ничего не отображает, когда в этой позиции нет цифры. Когда маска состоит только из заполнителей цифр '#', а значение редактора равно '0', редактор может отображать либо строку "0" (режим по умолчанию), либо ничего.

Свойство NumericMaskOptions.HideInsignificantZeros позволяет выбрать режим отрисовки для значений '0', когда маска состоит из символов '#'.

  • HideInsignificantZeros установлено в false (по умолчанию) — редактор отображает "0", когда значение редактирования равно '0'.

    editors-masks-numeric-hideinsignificantzeros-false

  • HideInsignificantZeros установлено в true — редактор ничего не отображает, когда значение редактирования равно '0'.

    editors-masks-numeric-hideinsignificantzeros-true

Пример

Следующий пример устанавливает свойство HideInsignificantZeros в true, чтобы ничего не отображать, когда значение редактирования равно '0'.

xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"

<mxe:TextEditor Name="textEditor1" MaskType="Numeric" Mask="#####.##" mxe:NumericMaskOptions.HideInsignificantZeros="True"/>

Следующий код устанавливает свойство HideInsignificantZeros в code-behind:

textEditor1.MaskType = Eremex.AvaloniaUI.Controls.Editors.MaskType.Numeric;
textEditor1.Mask = "#####.##";
textEditor1.SetValue(NumericMaskOptions.HideInsignificantZeros, true);



* Эта страница переведена с использованием технологий машинного перевода.