我有一个奇怪的问题。当我复制一个包含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;
}
}
但正如我之前所说,数据网格和剪贴板都有非破坏性字符,所以这个转换器是徒劳的。
关于如何防止这种替换字符的任何想法??
答案 0 :(得分:0)
你看过剪贴板上的所有数据风格吗?
普通字符串可能没有不间断的字符,但其他更具体的字符可能?在word / excel中,“粘贴特殊”以查看可用的其他格式,或在代码中枚举它们。
我打赌剪贴板上有多种数据,而word更喜欢另一种,excel更喜欢另一种,而你的代码中只有纯文本字符串?