2012-01-10 44 views
2

我有以下問題。
我想劃定一個字符串是一個特定的符號。這可能是逗號,空格,製表符或其他內容。 我在我的依賴項屬性Delimiter中存儲了該分隔符號。在ConverterParameter中使用反斜槓

在我的WPF代碼中,我有下面的單選按鈕,如果Delimiter屬於那個單選按鈕,應該檢查它。 這是WPF代碼:

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

如果我檢查出我的轉換器中的參數值是「T」。
我想 '\ T',所以我嘗試以下選項:

  • \ t
  • \\牛逼
  • \\\牛逼
  • '\ t'
  • 「\\ŧ '
  • '\\\ T'
  • &#92;噸
  • ' &#92; T」
  • {} {\ t}
  • '{} {\ t}'

(注:我添加了額外的空格和反斜槓在這裏正確顯示)。
結果是非常悲傷...三倍和雙反斜槓給我雙反斜槓,Single給我沒有。 &#92;也給我零反斜槓。

也許最令人沮喪的是,當我使用Tag屬性設置分隔符\ t只是工作正常,並沒有額外的逃脫的過程中...

有人可以解釋爲什麼發生這種情況,爲什麼沒有這些選項的工作和如何解決它?

UPDATE
當我使用一個multidatatrigger內multibinding結果是不同勢:

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

在我的轉換參數值是現在 '\\\\\\ T',但是我仍然不能使它工作。

我可以替換值,但這意味着我不得不在我的代碼後面使用不同的變量,這將是非常難看的。我想沒有其他解決方案。

回答

5

嘗試這種情況:

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

當我運行此,該窗口顯示文字文本框

+0

我以前嘗試過,但它沒有工作,然後.. 。不記得爲什麼= /。它現在似乎工作,我會多測試一下,非常感謝。 – Mixxiphoid 2012-04-12 08:57:08

+0

這適用於綁定和多重綁定中的轉換器參數,但也適用於標籤屬性。很多。 – Mixxiphoid 2012-04-12 09:00:17

+0

沒問題!很高興我能幫上忙 :) – 2012-04-14 04:17:06

0

你可能只需要.Replace("\\", "\")斜線....

MSDN說以下,但顯然如果下一個字符是「\」(Unicode代碼點005C),這是不正確

,消耗 「\」而不將其添加到文本值,然後消耗以下 字符並將其附加到該值。

+0

我會馬上嘗試。你是說轉換器參數中的所有內容都會以stringformat格式嗎? – Mixxiphoid 2012-01-10 15:00:21

+0

@Mixxiphoid不,但我使用'{}'來轉義綁定的'StringFormat'參數中的特殊字符,所以認爲它也適用於'ConverterParameter'。例如,{{Binding SomeValue,StringFormat = {} {0:C}}' – Rachel 2012-01-10 15:01:46

+0

'{} \ t'和{} \ t都不起作用:( – Mixxiphoid 2012-01-10 15:04:25

0

爲什麼不嘗試這樣的事情:

public static class Delimiters { 

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

} 

然後

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