Загрузка изображения в silverlight richtextarea с использованием xaml - PullRequest
1 голос
/ 16 декабря 2010

Из документации MSDN я знаю, что вы не можете экспортировать изображение, являющееся частью RichTextBox, используя свойство XAML.Это нормально, я могу обойти это путем перебора и просмотра блоков вручную.

Мой вопрос: если я пересоберу XAML вручную, включив в него изображение, сможет ли RichTextBox загрузить его изXAML.

Я уже реализовал рефлексию и ручной экспорт XAML, и он отлично работает без изображений.

С изображениями это выдает:

<Section xml:space="preserve" HasTrailingParagraphBreakOnPaste="False" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph TextAlignment="Left" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000"  >
<Run Text="Test" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000"  />
</Paragraph>
<Paragraph TextAlignment="Left" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000"  >
<InlineUIContainer>
<Image Source="./desert.jpg" Height="150" Width="200" />
</InlineUIContainer>
<Run Text="" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000"  />
</Paragraph>
</Section>

К которым я возвращаюсьRTB через свойство XAML и разрывы!(Исключение бесполезно, просто IllegalArgmentException, говорящее «Value».

Если вы вытащите только раздел InlineUIContainer, то это нормально!

Я не могу решить, возможно ли это проблема сневерное расположение изображения или RichTextBox просто не принимает изображения, кроме как в коде.

Единственная причина, по которой я думаю, что возможно указать изображение из xaml, заключается в том, что документы MSDN показывают его: http://msdn.microsoft.com/en-us/library/ee681613(VS.95).aspx.

Есть идеи?

Та,

Энди.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2010

Свойство Xaml в RichTextBox не поддерживает InlineUIContainer ни для входа, ни для выхода.

Сначала я бы попробовал обойти XamlReader на xaml, а затем добавить результат в коллекцию RichTextBox.Blocks: -

 Section section = (Section)XamlReader.Load(yourXaml);
 yourRTB.Blocks.Add(section);
0 голосов
/ 05 апреля 2012

В XAML ./desert.jpg источник работать не будет. Вместо этого используйте этот

<Image Source="YourNameSpaceBus;component/images/desert.jpg" 
Height="150" Width="200" />

Вот два важных ключевых слова, во-первых, ваше пространство имен ProjectBus

Второй фиксированный " компонент "

тогда ваш путь к изображению вам нужно написать. В противном случае, даже если он отображается во время разработки, иногда он не работает во время выполнения.

например

<Image Source="AHBSBus;component/images/mail.png" Stretch="None" Height="23">
</Image>

Надежда помогает

0 голосов
/ 17 декабря 2010

Ну, я нашел способ сделать это, не загружая XAML прямо в RTB, используя свойство XAML.

Чтобы загрузить XAML с изображениями в RTB, япришлось вернуться к загрузке XAML в объекты, сначала используя объект XamlReader, затем добавляя блоки один за другим, как показано в следующем коде:

        // Load up the XAML using the XamlReader
        Object o = XamlReader.Load(xamlTb.Text);
        if (o is Section)
        {
            // Make sure its a section and clear out the old stuff in the rtb
            Section s = o as Section;
            rtb.Blocks.Clear();

            // Remove the blocks from the section first as adding them straight away
            // to the rtb will throw an exception because they are a child of two controls.
            List<Block> tempBlocks = new List<Block>();
            foreach (Block block in s.Blocks)
            {
                tempBlocks.Add(block);
            }
            s.Blocks.Clear();

            // Add them block by block to the RTB
            foreach (Block block in tempBlocks)
            {
                rtb.Blocks.Add(block);
            }
        }

Не так аккуратно, как я бы помог, но я думаюСвойство XAML просто не анализирует InlineUIElements.

Энди.

...