C# 如何在XAML绑定中避开反斜杠
我知道我们可以使用C# 如何在XAML绑定中避开反斜杠,c#,wpf,xaml,C#,Wpf,Xaml,我知道我们可以使用StringFormat来转义XAML中的字符,但我无法理解它是如何工作的 我想转义\,以便正确显示包含路径C:\Windows\System32的字符串 如何做到这一点 以后编辑: 我得到了以下xaml: <DataGridTextColumn Binding="{Binding Path=DownloadPath}" Header="Path" /> 将生成以下输出: 如您所见,它没有添加\,而是添加了一个î尝试这样做。将“\\”加倍 “C:\\wind
StringFormat
来转义XAML中的字符,但我无法理解它是如何工作的
我想转义\
,以便正确显示包含路径C:\Windows\System32
的字符串
如何做到这一点
以后编辑:
我得到了以下xaml:
<DataGridTextColumn Binding="{Binding Path=DownloadPath}" Header="Path" />
将生成以下输出:
如您所见,它没有添加
\
,而是添加了一个î
尝试这样做。将“\\”加倍
“C:\\windows\\system32”通常,您会发现任何字符串都会在visual studio中自动替换其单个斜杠。这意味着要将一个只有一个反斜杠的字符串呈现给一个绑定,这比一开始想象的要复杂得多 我真的不明白你怎么会有那个奇怪的角色。 所以很可能是发生了别的事情 让我们缩小问题的范围 假设您只有一个反斜杠,我认为stringformat不会有帮助 您可以尝试将单个反斜杠替换为双斜杠的转换器:
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Markup;
namespace WpfApp1
{
public class SlashConverter : MarkupExtension, IValueConverter
{
private static SlashConverter _converter = null;
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_converter == null)
{
_converter = new SlashConverter();
}
return _converter;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value.ToString()).Replace(@"\", @"\\");
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
return value;
}
}
}
用法
请注意,如果您经常使用转换器作为资源,那么它的效率可能会更高,因为这是一个单例。尝试转换器,看看这是否解决了您的问题。如果确实如此,则重构以适应口味
如果没有,那么转换器还有另一个用途
获取调试信息
插入断点,查看转换器实际操作情况。“c:\\windiws\\system32”您好,欢迎来到堆栈溢出。我只是想让你知道你可以问自己的问题,回答和评论如果值来自绑定属性,则没有帮助。请给出一个简单反斜杠无效的绑定示例?@KlausGütter我编辑了初始帖子并添加了一个示例。这更像是DownloadPath属性中的字符集编码问题。例如,能否使用调试器验证DownloadPath属性的值是否如预期的那样?DownloadPath属性的值是否如预期的那样。我100%确定绑定属性的值中不需要转义字符。您必须搜索其他原因。谢谢,但它不起作用,它只是添加了另一个
î
。重点是缩小问题的范围。它不是一种“粘贴即忘”的解决方案。正如我所解释的。是的,我知道,谢谢。不知何故,我有一种感觉,这可能与键盘语言有关,我尝试为相应的文本框设置InputLanguageManager.InputLanguage=“en-US”
,但没有任何运气。会进一步挖掘,或者绳子里没有你认为的东西。这就是为什么我建议你放一个断点,看看转换器到底是什么。我刚刚用我的家用电脑检查了一下,这个问题不存在。我们的工作计算机似乎有一些本地化设置,干扰了文本框
。这很奇怪,因为我只在控制面板中添加了ENUS键盘。可能是某些Active Directory设置。
<TextBlock Text="{Binding DownloadPath, Converter={local:SlashConverter}}"/>