Маска ввода для TextBox

WPF
  1. 4 года назад

    Добрый день.
    Установил пакет Extended WPF Toolkit. Добавил ссылки в разметку
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    xmlns:s="clr-namespace:System;assembly=mscorlib"

    <TextBox Name="TextBoxДатаРождения" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" Margin="0,5">
    <xctk:MaskedTextBox x:Name="_maskedTextBox" Mask="__.__.____" ValueDataType="{x:Type s:String}"/>
    </TextBox>

    Появляются две ошибки:

    1. Ошибка Свойство "Text" не поддерживает значения типа "MaskedTextBox".
    2. Ошибка Указанное значение нельзя присвоить. Требуется следующий тип: "String".

    Пробовал через привязку:
    <TextBox Name="TextBox1" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" Margin="0,5" Text="{Binding Mask, ElementName=_maskedTextBox, ValidatesOnExceptions=True}">
    <xctk:MaskedTextBox x:Name="_maskedTextBox" Mask="__.__.____" ValueDataType="{x:Type s:String}"/>
    </TextBox>

    Выдает ошибки

    1. Ошибка Свойство "Text" установлено больше одного раза.
    2. Ошибка Указанное значение нельзя присвоить. Требуется следующий тип: "String".

    В чем проблема?

  2. Alexandr_Erohin

    Feb 10 Администратор
    Добавлено 4 года назад Alexandr_Erohin

    Ошибка Свойство "Text" не поддерживает значения типа "MaskedTextBox".

    Зачем MaskedTextBox находится внутри TextBox? Свойство Text элемента TextBox поддерживает только текст (надеюсь знаешь, что XAML встроенную в текстовый элемент разметку заносит в свойство Text родительского элемента). Правильная разметка:

    <Window ...
            xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
            xmlns:s="clr-namespace:System;assembly=mscorlib">
        
        <Grid>
            <xctk:MaskedTextBox x:Name="mask" Mask="(000) 000-0000" ValueDataType="{x:Type s:String}" 
                                Height="26" Width="200" ></xctk:MaskedTextBox>
        </Grid>
    
    </Window>

    И насчет маски, кто ее так задает "__.__.____" ? В стандартном варианте поддерживает маску чисел (нули, например "(000) 000-0000"), но можно изменить на спец символы, если нужно что-то более сложное, через создание своего поставщика в свойстве MaskedTextProvider.

  3. Спасибо. На счет маски я перемудрил, хотел её установить для ввода даты в TextBox. Вместо этого элемента поставил DataPicker и вопрос с маской снялся. Но всё равно спасибо, маски еще пригодятся.

или зарегистрируйтесь чтобы ответить