【问题标题】:RichTextBox does not display all my text.RichTextBox 不显示我的所有文本。
【发布时间】:2012-05-09 10:41:20
【问题描述】:

在我的 Windows Phone 应用程序中,我使用的是

    <ScrollViewer Margin="0,0,0,0"  VerticalAlignment="Top">
        <StackPanel Margin="0,0,0,0" Width="Auto"  >
            <RichTextBox x:Name="Browser" Foreground="Black" Height="Auto" cxi:WebBrowserHelper.Html="{Binding BrowserHtml}" Background="Transparent" HorizontalAlignment="Left" VerticalAlignment="Top"  Width="460" Margin="0,0,0,0" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" />
        </StackPanel>
    </ScrollViewer>

但并非所有文本都会显示。我该如何解决这个问题?

更新1

在我输入 height=700 之后:(见第二张图片)

更新2

    <StackPanel Margin="0,0,0,0" Width="480" Orientation="Vertical">
        <ScrollViewer Margin="0,0,0,0"  VerticalAlignment="Top" Height="1000" >
            <StackPanel Margin="0,0,0,0" Width="Auto"  >
                <RichTextBox x:Name="Browser" Foreground="Black" Height="1000" cxi:WebBrowserHelper.Html="{Binding BrowserHtml}" Background="Transparent" HorizontalAlignment="Left"   Width="460" Margin="0,0,0,0" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" />
            </StackPanel>
        </ScrollViewer>
    </StackPanel>

【问题讨论】:

  • 您能否提供您尝试显示的文本示例?
  • 它只滚动了一点,但很大一部分内容被剪切了
  • 您要显示多少文字?我快速浏览了一下,但找不到字符限制(1024、2048 等等)。您可以尝试将文本分解为运行并添加它们。虽然也可能是您没有限制滚动查看器的高度。
  • 您的第一个示例是否也有一个外部 StackPanel(只是未显示)?外部 StackPanel 是 ScrollViewer 在更新 2 中不起作用的原因(请参阅下面的答案)。
  • +1 用于提供 XAML 和屏幕截图 :)

标签: richtextbox c# silverlight windows-phone-7 silverlight-4.0


【解决方案1】:

问题不是 RichTextBox,而是您使用 StackPanels 引起的。 下面的示例用简单的矩形重现问题/解决方案。

垂直方向的 StackPanel 扩展为内容的大小。这意味着其中的 ScrollViewer 无法正确拉伸以适应。要使 ScrollViewer 工作,它必须是固定大小。

这个简单的例子不能用同样的原因:

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Margin="0,0,0,0" Width="480" Orientation="Vertical">
            <ScrollViewer Margin="0,0,0,0"  VerticalAlignment="Stretch">
                  <StackPanel Margin="0,0,0,0" Width="Auto"  >
                       <Rectangle Fill="Aqua" Height="200"/>
                       <Rectangle Fill="Red" Height="200"/>
                       <Rectangle Fill="Yellow" Height="200"/>
                       <Rectangle Fill="Blue" Height="200"/>
                       <Rectangle Fill="Green" Height="200"/>
                  </StackPanel>
             </ScrollViewer>
         </StackPanel>
    </Grid>

This Works(ScrollViewer 外没有堆栈面板):

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ScrollViewer Margin="0,0,0,0"  VerticalAlignment="Stretch" >
             <StackPanel Margin="0,0,0,0" Width="Auto"  >
                  <Rectangle Fill="Aqua" Height="200"/>
                  <Rectangle Fill="Red" Height="200"/>
                  <Rectangle Fill="Yellow" Height="200"/>
                  <Rectangle Fill="Blue" Height="200"/>
                  <Rectangle Fill="Green" Height="200"/>
             </StackPanel>
         </ScrollViewer>
    </Grid>

【讨论】:

  • Update 2 有一个高度为 1000 的 ScrollViewer...您需要为其滚动指定一个小得多的高度...您的 ScrollViewer 会延伸到屏幕外。
  • 它滚动,但还不够,问题出在其他问题上,因为当我更改 1000-> 700 时它没有帮助
  • 通过删除 StackPanel 并将 ScrollViewer 更改为拉伸以适应内容网格进行排序。如果您尝试的次数少于 700(例如 400),您会看到不同的结果。 700 太接近全屏高度,无法显示问题。 (删除了我之前的 cmets 作为噪音)
【解决方案2】:

您必须在 RichTextBox 中设置 height="auto"。以下代码适用于我:

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ScrollViewer Margin="0,0,0,0"  VerticalAlignment="Stretch" >
            <RichTextBox ScrollViewer.VerticalScrollBarVisibility="Visible"  Name="richTextBox" Style="{StaticResource RichTextBoxStyle1}" Height="auto"/>
            </ScrollViewer>
        </Grid>

【讨论】:

    【解决方案3】:

    使用 ScrollViewer 时,您必须指定它的高度元素(固定或动态,如网格中的)。否则它会根据内容占用所有高度,即使它超出了屏幕。 所以试试这样的 'ScrollViewer Height="700"....'

    【讨论】:

    • 记住,scrollViewer 的高度不是它的孩子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多