我有一个可关闭的标签系统,每个标签都有RichTextbox(作为暂存器)。我遇到的问题是每当我创建一个新的选项卡时,它应该创建一个新的RichTextBox,但它会覆盖所有以前的RTB的内容,清除它们。谁能告诉我为什么会这样?但是,当我创建固定RTB时(例如,创建一个带有4个选项卡的选项卡控件,每个选项卡都有自己的RTB),它不会发生,那么一切正常。但它不适用于动态标签?
以下代码来自每个标签项中包含的Usercontrol:
<Border Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Grid.RowSpan="3" BorderBrush="#FF939393" BorderThickness="26" CornerRadius="26" >
<Border.Effect>
<DropShadowEffect />
</Border.Effect>
</Border>
<TextBlock Grid.Column="1" Grid.Row="0" Height="23" Name="textBlock1" Text="{Binding Path=TestMessage}" />
<Button Grid.Column="0" Grid.Row="1" Style="{DynamicResource PageNavigationButton}" Height="52" Width="26" Command="{Binding Path=CMD_SwapLeft}" >
<Button.RenderTransform >
<RotateTransform Angle="180" CenterX="13" CenterY="26" />
</Button.RenderTransform>
</Button>
<Button Grid.Column="2" Grid.Row="1" Style="{DynamicResource PageNavigationButton}" Height="52" Width="26" Command="{Binding Path=CMD_SwapRight}" />
<View:DebtorTabView Grid.Column="1" Grid.Row="1" Visibility="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyDataContextVisibility}" DataContext="{Binding Path=MyDataContext}" />
<Grid Background="Blue" Grid.Column="1" Grid.Row="1" Visibility="{Binding Path=MyDataContextOtherVisibility}">
<TextBlock Text="{Binding Path=TestMessageTwo}" Height="23" Width="124" Margin="6,6,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" />
<RichTextBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Grid>
我没有完成任何绑定(当我解决这个问题时,它是自定义控件的一部分)。
谢谢所有
答案 0 :(得分:1)
这是因为WPF将卸载未使用的TabItems
,这意味着如果Text
属性未绑定到任何内容,它将被重置。
将RichTextBox.Text
属性绑定到DataContext
中的某个属性后,它应该可以正常工作。
另一种方法是扩展当前的TabControl
类,以便在切换选项卡时不会破坏其子级。您可以在this SO answer(最初包含代码的网站不再存在)中找到此代码,并且您在XAML中使用控件的方式与常规TabControl
<local:TabControlEx ItemsSource="{Binding OpenTabs}"
SelectedTab="{Binding SelectedTab}" />