Pete O'Hanlon
Хорошо, есть простой способ, которым вы можете "подделать" это относительно легко, но в зависимости от ширины альтернативных символов и того, как они соотносятся с шириной текущих символов, может быть немного резкий интерфейс. Хитрость заключается в наложении двух текстовых полей друг на друга. Верхний принимает входные данные, но фактически остается невидимым. Тот, что внизу, - это тот, который отображает ваше фактическое содержимое. XAML выглядит примерно так:
<Grid>
<TextBox Text="{Binding ConvertedText}" />
<TextBox Foreground="Transparent" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" />
</Grid>
Итак, модель представления, стоящая за этим, не может быть проще. Фактически, когда вы изменяете свойство Text, оно автоматически запускает код преобразования.
public string Text
{
get => _text;
set
{
if (_text != value)
{
_text = value;
ConvertedText = _text.Replace("1", "y");
OnPropertyChanged();
}
}
}
public string ConvertedText
{
get => _convertedText;
set
{
if (_convertedText != value)
{
_convertedText = value;
OnPropertyChanged();
}
}
}
И это все, потенциально простое решение вашей проблемы.
Richard Deeming
Возможно, вы захотите установить Focusable="False"
на первом текстовом поле, чтобы пользователи, которые вкладывают через форму, не набирали в неправильном поле. :)
Pete O'Hanlon
Это правда, я пропустил его совсем, но поскольку я только что набрал код в Редакторе CP, я рад, что получил то, что написал правильно.
Member 10527566
Спасибо, но мне нужно общее решение , у меня есть много TextBox, TexBlock, GridView.