0


我有一个可关闭的选项卡系统,每个选项卡都有 RichTextbox(作为暂存器)。我遇到的问题是,每当我创建一个新选项卡时,它应该会创建一个新的 RichTextBox,但它会覆盖所有以前的 RTB 的内容,将它们全部清除。谁能告诉我为什么会这样??但是,当我创建固定的 RTB(例如,创建一个带有 4 个选项卡的选项卡控件并且每个选项卡都有自己的 RTB)时,它不会发生,然后一切正常。但它不适用于动态标签?

下面的代码来自每个选项卡项中包含的用户控件:

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

我还没有完成任何绑定(当我解决这个问题时,它是自定义控件的一部分)。
谢谢大家

4

1 回答 1

1

这是因为 WPF 将卸载TabItems未使用的,这意味着如果该Text属性未绑定到任何东西,它将被重置。

一旦你将你的RichTextBox.Text属性绑定到 中的某个东西DataContext,它应该可以正常工作。

另一种方法是扩展当前TabControl类,以便在切换选项卡时它不会破坏其子级。您可以在此 SO 答案中找到此代码(最初包含该代码的站点已不复存在),并且您在 XAML 中使用控件的方式与常规方式相同TabControl

<local:TabControlEx ItemsSource="{Binding OpenTabs}" 
                    SelectedTab="{Binding SelectedTab}" />
于 2012-06-27T13:13:37.410 回答