سؤال

أنا أعمل على تطبيق دردشة بسيط. يتم ربط الرسائل حاليا إلى مربع قائمة مصمم حسب الطلب مثل هذا (XAML المبسط):

<ListBox ItemsSource="{Binding MessageCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

الآن أود أن أكون قادرا على وضع الصور (مثل الوجوه الضاحكة الرسومية) في نص الرسائل المعروضة. هل هناك أي طريقة لتحقيق ذلك باستخدام TextBlock (أو أي مكون إضافي آخر) أو هل أحتاج إلى استخدام بعض التحكم الخاص لهذا؟

شكرا مقدما

هل كانت مفيدة؟

المحلول

إذا كنت تريد الصور في الواقع في داخل النص (مثل التعبيرات)، ثم سيتعين عليك القيام ببعض العمل. يبدو أن هذا يبدو وكأنه أحد الأوقات القليلة، وأود أن أحصل فعليا على عنصر تحكم مستخدم، فستكون النقطة التي تقوم بمسح النص الذي يبحث عن قيم التعبيرات وبناء قالب بيانات أثناء الطيران.

تذكر أن أي شيء يمكنك القيام به في Xaml يمكنك القيام به في التعليمات البرمجية، وبالتالي فإن الرمز الذي أفكر فيه سيتبع هذه الفكرة العامة:

  1. مسح النص لقيم التعبيرات وإنشاء قائمة من القيم لعناصر البيانات.
  2. إنشاء dockpanel.
  3. foreach العنصر في القائمة، أضف إما نصية TextBlock أو صورة (بناء على القيمة).
  4. اضبط this.content إلى dockpanel.

أعتقد أن هذا مثل هذا هو في الواقع ما تبحث عنه، ولكن إذا كنت تريد مجرد صورة، فسيعمل اقتراح ValueConverter.

نصائح أخرى

فقط استخدم Inlineuicontainer.

<TextBlock TextWrapping="Wrap">
    <Run>Some text.</Run>
    <InlineUIContainer>
        <Image Source="http://sstatic.net/stackoverflow/img/apple-touch-icon.png" Height="20"></Image>
    </InlineUIContainer>
    <Run>Some more text.</Run>
</TextBlock>

محتوى TextBlock هو دائما مجرد سلسلة من الطيران، لذلك يجب عليك استخدام inlineuicontainer. يمكنك إدراج هذه الحاوية كواحدة من الخطوط الموجودة في TextBlock الخاص بك أينما تريد ظهور صورة، بالتناوب مع تشغيل النص. يمكنك تحليل رسالة وفي الوقت نفسه الاستمرار في إضافة الرموز الرموز (إما النص أو الصور) التي تجدها إلى مجموعة متنقل من TextBlock.

يمكنك استخدام محول القيمة لتحويل النص إلى نوع آخر له قائمة بالشرائح التي تتكون من أي نص أو الوجه المبتسم (بالترتيب الذي تظهر به).

ثم، يمكنك استخدام قالب بيانات للربط بهذا النوع الجديد وعرض النص وجوه مبتسم بشكل مناسب.

واجهت هذه المشكلة مؤخرا وأتغتزم ذلك

إنشاء INSTELTMPLATE إنشاء عنصر ListBox يحتوي على InditureControl التي تحتوي على Wrappanel في itemspaneltemplate ثم ربط السلسلة الخاصة بي إلى Octemssource of the InditureControl مع iCivalueConverter يضم كل المنطق.

انقسم كلماتك واستعلامتك / البحث عن سلاسل الرموز التشعبية والارتباطات التشعبية وما إلى ذلك وإنشاء TextBlock و Image و Hyperlink وعناصر زر وتعيين القيم ومقابض الأحداث.

في الوظيفة إنشاء قائمةu003CUIElement> وملء القائمة مع عناصر التحكم التي قمت بإنشائها وإرجاع القائمة ككائن في وظيفة تحويل iCivalueConverter.

لأن لديك Wrappanel في هناك تحصل على التفاف الخاص بك القيام به.

استخدم عنصر الصورة بدلا من TextBlock واستخدم محول لتعيين قيمة النص إلى صورة Smile.

<ListBox ItemsSource="{Binding MessageCollection}">
<ListBox.ItemTemplate>
    <DataTemplate>
        <Image Source="{Binding Text, Converter={StaticResource MyImageConverter}}"/>
    </DataTemplate>
</ListBox.ItemTemplate>

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