2016-08-21 2 views
1

Возможно ли стиль/шаблон TextBox, чтобы входные данные заполняли его значение справа налево? Мой вопрос не связан с арабским письмом - я пытаюсь создать текстовое поле для поля валюты, так что, когда пользователь вводит «12» - значение становится «0.12». Проект C#/WPF/MVVM здесьВход TextBox справа налево

+0

Почему вы не можете просто выровнять текст по правому краю? – GregaMohorko

ответ

1

Вы попробовали HorizontalContentAlignment? Это должно сработать для вас.

<TextBox HorizontalContentAlignment="Right" Text="6999958"></TextBox> 

Для преобразования значения '12' до '0.12', пожалуйста, используйте преобразователь, как

<TextBox HorizontalContentAlignment="Right" Text="6999958" Converter={Binding CurrencyConverter}></TextBox> 

И здесь идет код преобразователя:

public class CurrencyConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var intValue = int.Parse(value.ToString()); 
     var result = 0; 
     try 
     { 
      result = intValue/100; 
     } 
     catch (Exception) 
     { 

     } 
     return result; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

Спасибо, этот работает для TextBox. Вы могли бы посоветовать решение для TextBlock (DataGridColumn.CellStyle) тоже? TextBlock не имеет свойства HorizontalContentAlignment. –

+0

Используйте свойство TextAlignment для текстового блока. Но зачем это нужно для текстового блока, где пользователь не может вводить текст. Не могли бы вы попробовать это для текстового блока? '' – ViVi

+0

Да, спасибо, очень близко к что я хочу. TextBlock - потому что это элемент DataGridColumn.CellStyle - когда пользователь нажимает на ячейку для редактирования - становится TextBox. Если я сначала создаю этот TextBox - DataGrid выглядит не очень хорошо - и я не хочу, чтобы это была коллекция TextBox, которые сразу принимают курсор –

0

Пробовал несколько решений здесь SO, и IMHO - this one является лучшим для форматирования валюты в TextBox. Это решение форматирует ввод в значение валюты, а также принимает только числа и указанный делитель (который настраивается в обработчике событий KeyPress). Просто дать попробовать, легко реализовать и работает отлично подходит для этого случая (поддерживает формат в конкретной культуре, а не культуры вашего текущего компьютера)

private void textBox_TextChanged(object sender, EventArgs e) 
{ 
    textBox.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("id-ID"), "{0:##0.00}", double.Parse(textBox.Text)); 
} 

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) 
    { 
     e.Handled = true; 
    } 

    // only allow one decimal point 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
    { 
     e.Handled = true; 
    } 
} 
Смежные вопросы