繁体   English   中英

在ConverterParameter中使用反斜杠

[英]Use a backslash in the ConverterParameter

我有以下问题。
我想将字符串定界为某个符号。 这可能是逗号,空格,制表符或其他名称。 我将该定界符符号存储在我的依赖项属性Delimiter

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

<RadioButton IsChecked="{Binding ElementName=view, Path=Delimiter, Converter={StaticResource MyConverterToCheckForEquality}, ConverterParameter=\t}" Tag="\t" />

如果我在转换器中检出参数,则该值为“ t”。
我想要'\\ t',所以尝试了以下选项:

  • \\ t
  • \\\\Ť
  • \\\\\\Ť
  • '\\ t'
  • '\\\\ T'
  • '\\\\\\ T'
  • &#92; t
  • '&#92; t'
  • {} {\\吨}
  • '{} {\\吨}'

(注意:我添加了额外的空格和反斜杠以在此处正确显示)。
结果非常令人遗憾。三重和双反斜杠给了我两个反斜杠,单反给了我一个。 &#92; 还给了我零反斜杠。

也许最令人沮丧的是,当我使用Tag属性设置定界符\\ t时,它工作得很好,并且在过程中没有多余的转义...

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

UPDATE
当我在multidatatrigger中使用multibinding时,结果是不同的:

<Binding ElementName="view" Path="Delimiter" Converter="{StaticResource MyConverterToCheckForEquality}" ConverterParameter="\\\t" />

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

我可以替换该值,但这意味着我必须在文件后面的代码中使用其他变量,这非常难看。 我想虽然没有其他解决方案。

尝试这个:

ConverterParameter='&#09;'

&#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>

C#代码背后:

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();
    }
}

当我运行它时,窗口显示带有文本“ Success!”的TextBox。

为什么不尝试这样的事情:

public static class Delimiters {

    // ...
    public static char Tab { get { return '\t'; } }
    // ...

}

然后

<Binding ... ConverterParameter="{x:Static Delimiters.Tab}" ... />

您可能只需要.Replace("\\\\", "\\")斜线...。

MSDN说以下内容,但显然不正确

如果下一个字符是“ \\”(Unicode代码点005C),则在不将其添加到文本值的情况下使用该“ \\”,然后使用以下字符并将其附加到该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM