سؤال
لنفترض أن لدي بعض XAML مثل هذا:
<Window.Resources>
<v:MyClass x:Key="whatever" Text="foo\nbar" />
</Window.Resources>
من الواضح أنني أريد حرف سطر جديد في خاصية MyClass.Text، لكن محلل XAML يقوم بإنشاء الكائن باستخدام السلسلة الحرفية "foo bar".
هل هناك (أ) طريقة لإقناع المحلل اللغوي بترجمة تسلسلات الهروب، أو (ب) طريقة .NET لتفسير سلسلة بالطريقة التي يفعلها مترجم C#؟
أدرك أنه يمكنني الذهاب إلى هناك بحثًا عنه \n
تسلسلات، ولكن سيكون من الأفضل أن يكون لديك طريقة عامة للقيام بذلك.
المحلول
يمكنك استخدام الهروب من أحرف XML
<TextBlock Text="Hello World!"/>
نصائح أخرى
من أعلى رأسي، حاول؛
- ربما تعبير ملزم مخصص؟
<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>
استخدام مورد ثابت سلسلة؟
جعل النص الخاصية الافتراضية لعنصر التحكم الخاص بك و؛
<v:MyClass x:Key="whatever"> foo bar </v:MyClass>
أدرك أنه يمكنني الذهاب إلى هناك للبحث عن تسلسلات ، [...]
إذا كان كل ما يهمك هو ، فيمكنك تجربة شيء مثل:
string s = "foo\\nbar";
s = s.Replace("\\n", "\n");
أو، بالنسبة إلى ب) بما أنني لا أعرف ولا أستطيع العثور على وظيفة مدمجة للقيام بذلك، شيء من هذا القبيل:
using System.Text.RegularExpressions;
// snip
string s = "foo\\nbar";
Regex r = new Regex("\\\\[rnt\\\\]");
s = r.Replace(s, ReplaceControlChars); ;
// /snip
string ReplaceControlChars(Match m)
{
switch (m.ToString()[1])
{
case 'r': return "\r";
case 'n': return "\n";
case '\\': return "\\";
case 't': return "\t";
// some control character we don't know how to handle
default: return m.ToString();
}
}
سأستخدم عنصر التحكم TextBlock الافتراضي كمرجع هنا.في عنصر التحكم هذا، يمكنك إجراء فواصل الأسطر كما يلي:
<TextBlock>
Line 1
<LineBreak />
Line 2
</TextBlock>
يجب أن تكون قادرًا على القيام بشيء مماثل مع عنصر التحكم الخاص بك عن طريق جعل قيمة محتوى عنصر التحكم الخاص بك هي خاصية النص.