Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在XAML绑定中避开反斜杠_C#_Wpf_Xaml - Fatal编程技术网

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}}"/>