从datagrid复制时会出现不间断的字符

时间:2011-11-28 15:20:32

标签: wpf excel datagrid whitespace

我有一个奇怪的问题。当我复制一个包含2个或更多组空格的单元格(或行)时,粘贴此空格时会替换为非破坏字符(Alt + 160)。更奇怪的是,如果我粘贴Word然后从Word复制并再次粘贴到我的程序上,则返回空格,但如果我粘贴Excel,则从Excel复制并粘贴到我的程序中,非破坏字符仍然存在。显然,简单的方法不是我们的方式,我们需要复制/粘贴到Excel中。

我可以在我的应用程序上控制这个角色的引入,用空格替换它,并且(没有一个好主意)没有人会故意引入非破坏角色。但我们使用VB 6.0中的另一个应用程序,有超过200个窗口,而且我没有老板对该应用程序进行任何更改的许可。

我调试了我的代码,而datagrid没有非破坏字符。复制后剪贴板没有任何非破坏字符。如果我从文本框中复制相同的文本,则在粘贴时不会用非破坏字符替换空格。 这是我的任何datagrids的一列的axml:

<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;
     }
}

但正如我之前所说,数据网格和剪贴板都有非破坏性字符,所以这个转换器是徒劳的。

关于如何防止这种替换字符的任何想法??

1 个答案:

答案 0 :(得分:0)

你看过剪贴板上的所有数据风格吗?

普通字符串可能没有不间断的字符,但其他更具体的字符可能?在word / excel中,“粘贴特殊”以查看可用的其他格式,或在代码中枚举它们。

我打赌剪贴板上有多种数据,而word更喜欢另一种,excel更喜欢另一种,而你的代码中只有纯文本字符串?