سؤال

لنفترض أن لدي بعض 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&#13;World!"/>

نصائح أخرى

من أعلى رأسي، حاول؛

  1. ربما تعبير ملزم مخصص؟

<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>

  1. استخدام مورد ثابت سلسلة؟

  2. جعل النص الخاصية الافتراضية لعنصر التحكم الخاص بك و؛

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

يجب أن تكون قادرًا على القيام بشيء مماثل مع عنصر التحكم الخاص بك عن طريق جعل قيمة محتوى عنصر التحكم الخاص بك هي خاصية النص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top