1-将以下代码复制并粘贴到 MainWindow.xaml 文件中。
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="Button1" Width="250" Height="25" VerticalAlignment="Top" Content="Copy from RichTextBox1 to RichTextBox2"/>
<TabControl Margin="0,50,0,0">
<TabItem Header="TabItem1">
<RichTextBox x:Name="RichTextBox1">
<FlowDocument x:Name="FlowDocument1">
<Paragraph>
<Run Text="England"/>
<LineBreak/>
<Run FontWeight="Bold" Text="France"/>
<LineBreak/>
<Run Foreground="Red" Text="Germany"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
</TabItem>
<TabItem Header="TabItem2">
<Canvas x:Name="Canvas1">
<Thumb x:Name="Thumb1" Canvas.Left="0" Canvas.Top="0">
<Thumb.Template>
<ControlTemplate>
<RichTextBox x:Name="RichTextBox2" Width="400" Height="200">
<FlowDocument x:Name="FlowDocument2" FontFamily="Segoe UI" FontSize="12">
<Paragraph/>
</FlowDocument>
</RichTextBox>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Canvas>
</TabItem>
</TabControl>
</Grid>
</Window>
2-将以下代码复制并粘贴到后面的代码文件中。
Class MainWindow
Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
Dim myMemoryStream As New System.IO.MemoryStream
Dim FirstTextRange As New TextRange(RichTextBox1.Document.ContentStart, RichTextBox1.Document.ContentEnd)
FirstTextRange.Save(myMemoryStream, DataFormats.XamlPackage)
myMemoryStream.Position = 0
Dim myRichTextBox As New RichTextBox
myRichTextBox = CType(Thumb1.Template.FindName("RichTextBox2", Thumb1), RichTextBox)
Dim SecondTextRange As New TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd)
SecondTextRange.Load(myMemoryStream, DataFormats.XamlPackage)
End Sub
End Class
3-运行此项目,选择 TabItem2 ,单击 Button1 ,了解从RichTextBox1到RichTextBox2的复制已成功完成。
我的问题在这里;
再次运行该项目,选择 TabItem1 ,单击 Button1 ,看到此错误:https://prnt.sc/mwjijx
如您所见;
如果选择了 TabItem2 ,则没有错误,
如果选择了 TabItem1 ,则出现错误。
答案 0 :(得分:0)
在打开包含Thumb1
元素的选项卡之前,似乎没有完全创建该元素。因此,FindName
方法找不到RichTextBox2
(因此它返回null
)。
您可以尝试通过调用其ApplyTemplate
方法来强制完全创建Thumb1
元素。然后调用FindName
方法:
Thumb1.ApplyTemplate()
myRichTextBox = CType(Thumb1.Template.FindName("RichTextBox2", Thumb1), RichTextBox)