我有一个FlowDocument。是否可以向其中添加内联但该内联是在XAML中定义的。例如
<FlowDocument >
<Paragraph Name="Output"/>
</FlowDocument>
var AppendTo = new Span();
var XAML = "<Run>Something</Run>";
AppendTo.Inlines.Add(XAML); // This is what I mean - adding elements using XAML
Output.Inlines.Add(AppendTo);
谢谢
注意-那些投票赞成关闭它的人,因为它太广泛了。也许读完我标记为答案的答案,然后思考问题出在哪里。
答案 0 :(得分:1)
您可以使用Run
方法以编程方式从XAML字符串中创建实际的XamlReader.Parse
元素或任何其他类型的元素:
var AppendTo = new Span();
var pc = new System.Windows.Markup.ParserContext();
pc.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
var run= System.Windows.Markup.XamlReader.Parse("<Run>Something</Run>", pc) as Run;
AppendTo.Inlines.Add(run);
Output.Inlines.Add(AppendTo);
答案 1 :(得分:0)
当然可以。为所有相关元素分配名称会更容易。
FlowDocument
被定义为Control
<Window.Resources>
<FlowDocument x:Key="Document">
<Paragraph Name="Inline" />
</FlowDocument>
</Window.Resources>
在Control
的代码隐藏文件中,您可以使用FrameworkElement.TryFindResource(object) : object
或FrameworkElement.FindResource(object) : object
来浏览控件的资源:
private void OnLoaded(object sender, RoutedEventArgs e)
{
if (TryFindResource("Document") is FlowDocument document)
{
foreach (Block documentBlock in document.Blocks)
{
if (documentBlock is Paragraph paragraph || documentBlock.Name.Equals("Inline", StringComparison.OrdinalIgnoreCase))
{
// Do something with the Paragraph
}
}
}
}
FlowDocument
被定义为Control
可视树的元素<Window>
<Grid SnapsToDevicePixels="True">
<RichTextBox>
<RichTextBox.Document>
<FlowDocument x:Name="Document">
<Paragraph Name="Inline" />
</FlowDocument>
</RichTextBox.Document>
</RichTextBox>
</Grid>
</Window>
在代码后面,只需按其名称访问元素。可以通过自动生成的字段引用来访问分配了Name
值的每个元素:
private void OnLoaded(object sender, RoutedEventArgs e)
{
Paragraph paragraph = this.Inline;
// Do something with the Paragraph
}
VisualTreeHelper
也可用于遍历树形图并搜索文档或内联元素,