2012-02-02 32 views
3

我想在TextBox中顯示一個包含換行符的字符串,但我希望TextBox將它顯示爲一行。刪除換行符不是一個選項;他們還需要在編輯文本後進行保存。忽略WPF文本框中保留換行符

在下面的示例中,在第一個文本框中輸入時,文本必須在第二個文本框中以單行顯示。在編輯第二個文本框中的文本時,必須保留第一個文本框中的換行符。

有誰知道這是可能的嗎?

<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

我創建了一個綁定轉換器,對於我的方案的工作原理:換行符替換爲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),在易用性,這將是有問題的,雖然條款與實際換行符替換那些序列。