簡體   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