在ConverterParameter中使用反斜杠

Mix*_*oid 2 c# data-binding wpf escaping converter

我有以下问题.
我想将字符串分隔为某个符号.这可以是逗号,空格,制表符或其他内容.我将分隔符符号存储在我的依赖项属性中Delimiter.

在我的WPF代码中,我有以下单选按钮,如果Delimiter属于该单选按钮,应该检查它.这是WPF代码:

<RadioButton IsChecked="{Binding ElementName=view, Path=Delimiter, Converter={StaticResource MyConverterToCheckForEquality}, ConverterParameter=\t}" Tag="\t" />
Run Code Online (Sandbox Code Playgroud)

如果我检查转换器中的参数,则值为't'.
我想'\ t'所以我尝试了以下选项:

  • \ t
  • \\Ť
  • \\\Ť
  • '\ t'
  • '\\ T'
  • '\\\ T'
  • \ t
  • '\ t'
  • {} {\吨}
  • '{} {\吨}'

(注意:我添加了额外的空格和反斜杠以正确显示它).
结果非常令人难过...... Triple和Double反斜杠给了我双反斜杠,Single给我没有.\ 也给了我零反斜杠.

也许最令人沮丧的是,当我使用Tag属性设置分隔符时,\ t工作正常并且在此过程中不会额外转义...

有人可以解释为什么会发生这种情况,为什么这些选项都不起作用以及如何修复它?

更新
当我在multidatatrigger中使用多绑定时,结果是不同的:

<Binding ElementName="view" Path="Delimiter" Converter="{StaticResource MyConverterToCheckForEquality}" ConverterParameter="\\\t" />
Run Code Online (Sandbox Code Playgroud)

我的转换器中的参数值现在为'\\\\\\ t',但我仍然无法使其工作.

我可以替换值,但这意味着我必须在我的代码后面使用不同的变量,这将是非常难看的.我想没有其他解决方案.

K M*_*hta 5

试试这个:

ConverterParameter='&#09;'
Run Code Online (Sandbox Code Playgroud)

&#09;表示\t(#9是水平制表符的ASCII等价物)

我通过将它作为转换器参数传递给我的转换器来测试它,并且它正确显示.这是我的测试代码:

XAML:

<Window.Resources>
    <local:MyConverter x:Key="MyConverter" />
</Window.Resources>
<Grid Tag="NotUsed_Ignore">
    <TextBox Text="{Binding Converter={StaticResource MyConverter}, ConverterParameter='&#09;', RelativeSource={RelativeSource Mode=Self}}, Path=Parent.Tag" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

C#codebehind:

public sealed class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        if (parameter.Equals("\t")) return "Success!";
        return "Failure!";
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,窗口显示一个TextBox,文本为"Success!"