У меня любопытная проблема.Когда я копирую ячейку (или строку) с пробелами в группах по 2 и более, при вставке эти пробелы заменяются неразрывным символом (Alt + 160).Что более любопытно, если я вставляю в Word, затем копирую из Word и снова вставляю в мою программу, пробелы возвращаются, но если я вставляю в Excel, то копирую из Excel и вставляю в мою программу, неразрывные символы все еще присутствуют.Очевидно, что легкий путь - это не наш путь, нам нужно скопировать / вставить в / из Excel.
Я могу контролировать в своем приложении введение этого символа, заменить его пробелами, добавив (что никогда не бываетхорошая идея), что никто не будет вводить неразрывные символы намеренно.Но мы работаем с другим приложением в VB 6.0 с более чем 200 окнами, и у меня нет разрешения моего босса изменить что-либо в этом приложении.
Я отладил свой код, а сетка данных не имеетнеразрывный характер.В буфере обмена нет неразрывного символа после копирования.И если я копирую тот же текст из текстового поля, при вставке пробелы не заменяются неразрывными символами.это аксель одного столбца любого из моих наборов данных:
<DataGridTextColumn Header="Machine" CanUserSort="True" IsReadOnly="True"
MinWidth="10" Width="*" MaxWidth="Infinity"
Binding="{Binding Path=NOM_MAQ}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="ToolTip" Value="{Binding Path=NOM_MAQ}"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="TextWrapping" Value="NoWrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Я попытался добавить в DataGridTextColumn конвертер:
ClipboardContentBinding="{Binding Path=NOM_MAQ,
Converter={StaticResource QuitNonBreakingConverter}}"
class QuitNonBreakingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
string texto = value.ToString();
StringBuilder sb = new StringBuilder(texto.Length);
foreach (char c in texto.ToCharArray())
{
if (char.Equals(c, System.Convert.ToChar(160)))
{
sb.Append(System.Convert.ToChar(32));
}
else sb.Append(c);
}
return sb.ToString();
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value;
}
}
Но, как я уже говорил, сетка данных илибуфер обмена имеет неразрывный символ, поэтому этот преобразователь бесполезен.
Есть идеи, как предотвратить замену символов ??