我从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,
安迪。
答案 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>
希望帮助