首页 文章

在WPF TextBox中保留换行符时忽略

提问于
浏览
4

我想在TextBox中呈现包含换行符的字符串,但我希望TextBox将其显示为单行 . 删除换行符不是一种选择;在编辑文本之后,还需要保留它们 .

在下面的示例中,在第一个TextBox中键入时,文本必须在第二个TextBox中以单行显示 . 在第二个TextBox中编辑文本时,必须保留第一个TextBox中的换行符 .

有谁知道这是否可能?

<Grid Background="AliceBlue">
  <Grid.RowDefinitions>
     <RowDefinition Height="100"/>
     <RowDefinition Height="100"/>
  </Grid.RowDefinitions>

  <TextBox x:Name="FirstTextBox"
     AcceptsReturn="True"
     TextWrapping="Wrap"
     Text="{Binding MyString}" 
     Width="150"/>

  <TextBox x:Name="SecondTextBox"
     Grid.Row="1"
     AcceptsReturn="False"
     TextWrapping="NoWrap"
     Text="{Binding MyString}"
     VerticalAlignment="Top"/>
</Grid>

2 回答

  • 3

    我创建了一个适用于我的场景的绑定转换器:换行符被替换为unicode零宽度空格字符(U 200B):

    public class IgnoreLinebreaksConverter : IValueConverter
    {
        private const string Sub = " \u200B";
        private const string Lb = "\r\n";
    
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var s = (string)value;
            return string.IsNullOrEmpty(s) ? s : Regex.Replace(s, Lb, Sub);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var s = (string)value;
            return string.IsNullOrEmpty(s) ? s : Regex.Replace(s, Sub, Lb);
        }
    }
    
  • 0

    您可以使用 \n (使用Binding.Converter)对换行进行文本编码,然后您可以根据需要(在 ConvertBack 中)将这些序列替换为实际换行符,但在可用性方面可能会有问题 .

相关问题