带有RichTextboxes的Wpf动态选项卡

时间:2012-06-27 04:58:38

标签: wpf richtextbox


我有一个可关闭的标签系统,每个标签都有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>

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

1 个答案:

答案 0 :(得分:1)

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

RichTextBox.Text属性绑定到DataContext中的某个属性后,它应该可以正常工作。

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

<local:TabControlEx ItemsSource="{Binding OpenTabs}" 
                    SelectedTab="{Binding SelectedTab}" />