使用xaml将图像加载到silverlight richtextarea中

时间:2010-12-16 16:37:31

标签: silverlight image xaml richtextbox

我从MSDN文档中了解到,您无法使用XAML属性导出属于RichTextBox一部分的Image。这很好,我可以通过重新选择并手动查看块来解决这个问题。

我的问题是,如果我手动重新构建XAML以包含Image,那么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>

我通过XAML属性将其反馈到RTB并中断! (例外是无用的,只是一个名为'Value'的IllegalArgmentException。

如果你只拿出InlineUIContainer部分就好了!

如果图像位置可能出错或者RichTextBox只是不接受代码内的图像,我无法解决。

我认为可能从xaml指定图像的唯一原因是因为MSDN文档显示了它:http://msdn.microsoft.com/en-us/library/ee681613(VS.95).aspx

有什么想法吗?

的Ta,

安迪。

3 个答案:

答案 0 :(得分:2)

Xaml上的RichTextBox属性不支持InlineUIContainer in或out。

我首先尝试的一种方法是在xaml上使用XamlReader,然后将结果添加到RichTextBox.Blocks集合中: -

 Section section = (Section)XamlReader.Load(yourXaml);
 yourRTB.Blocks.Add(section);

答案 1 :(得分:0)

好吧,我已经找到了一种方法,所有这一切都没有使用XAML属性将XAML直接加载到RTB中。

要将带有图像的XAML加载到RTB中,我必须首先使用XamlReader对象恢复为将XAML加载到对象中,然后按照以下代码逐个添加块:

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

安迪。

答案 2 :(得分:0)

在XAML中./desert.jpg源代码无效。而是使用这个

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

以下是两个重要的关键字:第一个是您的命名空间 ProjectBus

第二个修复了“组件

然后你需要写你的imagepath。 否则,即使它在设计时可显示,有时它在运行时也不起作用。

,例如

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

希望帮助