[英]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',所以尝试了以下选项:
(注意:我添加了额外的空格和反斜杠以在此处正确显示)。
结果非常令人遗憾。三重和双反斜杠给了我两个反斜杠,单反给了我一个。 &#92; 还给了我零反斜杠。
也许最令人沮丧的是,当我使用Tag属性设置定界符\\ t时,它工作得很好,并且在过程中没有多余的转义...
有人可以解释为什么会发生这种情况,为什么这些选项都不起作用以及如何解决?
UPDATE
当我在multidatatrigger中使用multibinding时,结果是不同的:
<Binding ElementName="view" Path="Delimiter" Converter="{StaticResource MyConverterToCheckForEquality}" ConverterParameter="\\\t" />
我的转换器中的参数值现在为'\\\\\\\\\\\\ t',但是我仍然无法使其正常工作。
我可以替换该值,但这意味着我必须在文件后面的代码中使用其他变量,这非常难看。 我想虽然没有其他解决方案。
尝试这个:
ConverterParameter='	'
	
表示\\t
(#9是水平制表符的ASCII等效项)
我通过将其作为转换器参数传递到我的转换器中对其进行了测试,并且它可以正确显示。 这是我的测试代码:
XAML:
<Window.Resources>
<local:MyConverter x:Key="MyConverter" />
</Window.Resources>
<Grid Tag="NotUsed_Ignore">
<TextBox Text="{Binding Converter={StaticResource MyConverter}, ConverterParameter='	', 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.