[英]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.