【问题标题】:How to escape backslash in XAML binding如何在 XAML 绑定中转义反斜杠
【发布时间】:2019-10-04 15:41:40
【问题描述】:

我知道我们可以使用StringFormat 来转义 XAML 中的字符,但我无法理解它是如何工作的。

我想转义\,以便正确显示包含C:\Windows\System32 之类的路径的字符串。

如何做到这一点?

稍后编辑

我得到了以下 xaml:

<DataGridTextColumn Binding="{Binding Path=DownloadPath}" Header="Path" />

产生以下输出:

如您所见,它添加了î,而不是\

【问题讨论】:

  • 你能举一个简单的反斜杠不起作用的绑定示例吗?
  • @KlausGütter 我编辑了最初的帖子并添加了一个示例。
  • 这看起来更像是 DownloadPath 属性中的字符集编码问题。你能验证一下吗?使用调试器,DownloadPath 属性的值是否符合您的预期?
  • DownloadPath 属性值符合预期。
  • 我 100% 确定绑定属性的值中不需要转义字符。您必须寻找其他原因。

标签: c# wpf xaml


【解决方案1】:

尝试这样做。双倍的“\\” "C:\\windows\\system32"

【讨论】:

  • "c:\\windiws\\system32"
  • 您好,欢迎来到 Stack Overflow。我只是想让你知道你可以edit你自己的问题、答案和cmets
  • 如果该值来自一个没有帮助的绑定属性。
【解决方案2】:

通常你会发现任何字符串都会在 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;
        }
    }
}

用法

    <TextBlock Text="{Binding DownloadPath, Converter={local:SlashConverter}}"/>

请注意,如果您经常使用它,作为资源的转换器可能会更有效,因为那将是一个单例。试试转换器,看看这是否能解决您的问题。如果确实如此,则重构以品尝。

如果没有,那么转换器还有其他用途。

用于调试信息。

打个断点,看看转换器到底交了什么。

【讨论】:

  • 谢谢,但它不起作用,它只是添加了另一个î
  • 重点是缩小问题范围。它不打算作为粘贴和忘记的解决方案。正如我解释的那样。
  • 是的,我知道,谢谢。我不知何故有一种感觉,这可能与键盘语言有关,我尝试为各自的TextBox 设置InputLanguageManager.InputLanguage="en-US",但没有任何运气。将进一步挖掘。
  • 或者字符串中没有您认为的内容。这就是为什么我建议你在里面设置一个断点,看看转换器到底是什么。
  • 我刚刚检查了我的家用电脑,但那里不存在此问题。似乎我们的工作计算机有一些干扰TextBox 的本地化设置。这很奇怪,因为我在控制面板中只添加了 en-US 键盘。可能是一些 Active Directory 设置。
猜你喜欢
  • 2012-10-03
  • 2015-03-29
  • 1970-01-01
  • 2013-11-10
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多