我有以下问题
我想将字符串分隔为某个符号。这可以是逗号,空格,制表符或其他内容。
我将分隔符符号存储在我的依赖项属性Delimiter
中。
在我的WPF代码中,我有以下单选按钮,如果Delimiter
属于该单选按钮,则应该检查该单选按钮。
这是WPF代码:
<RadioButton IsChecked="{Binding ElementName=view, Path=Delimiter, Converter={StaticResource MyConverterToCheckForEquality}, ConverterParameter=\t}" Tag="\t" />
如果我检查转换器中的参数,则值为't' 我想'\ t'所以我尝试了以下选项:
(注意:我添加了额外的空格和反斜杠,以便在此处正确显示) 结果非常令人难过...... Triple和Double反斜杠给了我双反斜杠,Single给我没有。 &安培; #92;也给了我零反斜杠。
也许最令人沮丧的是,当我使用Tag属性设置分隔符时,\ t工作正常,并且在此过程中不会额外转义......
有人可以解释为什么会发生这种情况,为什么这些选项都不起作用以及如何修复它?
更新
当我在multidatatrigger中使用多重绑定时,结果是不同的:
<Binding ElementName="view" Path="Delimiter" Converter="{StaticResource MyConverterToCheckForEquality}" ConverterParameter="\\\t" />
我的转换器中的参数值现在为'\\\\\\ t',但我仍然无法使其正常工作。
我可以替换该值,但这意味着我必须在我的代码后面使用不同的变量,这将非常难看。我想没有其他解决方案。
答案 0 :(得分:5)
试试这个:
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#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();
}
}
当我运行此窗口时,窗口显示一个TextBox,文本为“Success!”
答案 1 :(得分:0)
您可能只需要.Replace("\\", "\")
斜杠....
MSDN说了以下内容,但显然这是不正确的
如果下一个字符是“\”(Unicode代码点005C),请使用它 “\”而不将其添加到文本值,然后使用以下内容 字符并将其附加到值。
答案 2 :(得分:0)
为什么不尝试这样的事情:
public static class Delimiters {
// ...
public static char Tab { get { return '\t'; } }
// ...
}
然后
<Binding ... ConverterParameter="{x:Static Delimiters.Tab}" ... />