【问题标题】:TextBlock or RichTextBox is giving me trimmed textTextBlock 或 RichTextBox 正在给我修剪的文本
【发布时间】:2014-07-30 06:42:17
【问题描述】:

我通过 XML 解析从服务器 API 获取原始文本。我正在检查全文是否进入数组/列表,但在文本块或 Richtextbox 内的页面中显示时会被修剪。

这是 Listbox 的 XAML,其中包含我的 Richtextbox:

         <ListBox Name="ListboxPolicy" Background="#FF5F113C" Opacity="0.93"  Foreground="#FFF5E0EC" Margin="0,137,0,0">


            <ListBox.ItemTemplate>
                <DataTemplate >
                    <StackPanel>
                        <!--<TextBlock x:Name="PolicyText" TextAlignment="Justify"  Text="{Binding policyDetailsData}"  TextWrapping="Wrap" IsHitTestVisible="False"/>-->
                        <RichTextBox  x:Name="BoxPolicies" IsHitTestVisible="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" SizeChanged="BoxPolicies_SizeChanged" >
                            <Paragraph FontSize="24" FontWeight="Bold" Foreground="#FFDABCD5">

                                <Run Text="{Binding Path=policyTitleData}" />
                            </Paragraph>
                            <Paragraph  FontSize="20" TextAlignment="Justify" >

                                <Run   Text="{Binding Path=policyDetailsData}" />
                            </Paragraph>
                            <Paragraph FontSize="20">

                                <Run Text="-----------------------------" />
                            </Paragraph>
                        </RichTextBox>


                        <!--<TextBlock x:Name="PolicyHeader"  Text="{Binding policyTitleData}"  TextWrapping="Wrap" IsHitTestVisible="False" Foreground="#FF13090E" FontWeight="Bold" FontSize="22"/>
                        <TextBlock x:Name="PolicyText"    Text="{Binding policyDetailsData}"  TextWrapping="Wrap" IsHitTestVisible="False" FontSize="20"/>-->



                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>


        </ListBox>

【问题讨论】:

  • 你试过去掉 Margin="0,137,0,0" 吗?
  • 是的,但不起作用:(

标签: c# xaml parsing windows-phone-8 listbox


【解决方案1】:

StackPanel 的默认方向是垂直的,如果您不将 Height 和 Width 设置为 stackpanel,它会占用子元素(此处为 RichTextBox)的高度和宽度。

要避免文本修剪,您需要将 StackPanel Orientation="Horizo​​ntal" 和 Height 和 Width 设置为 RichtextBox

     <StackPanel Orientation="Horizontal">
        <RichTextBox  x:Name="BoxPolicies" IsHitTestVisible="False" Height="400" Width="400" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
            <FlowDocument >
                <Paragraph FontSize="24" FontWeight="Bold" Foreground="Red">
                    <Run />
                </Paragraph>
                <Paragraph  FontSize="20" TextAlignment="Justify" >
                    <Run />
                </Paragraph>
            </FlowDocument>
        </RichTextBox>
    </StackPanel>

【讨论】:

    【解决方案2】:

    出于性能原因,可以在单个 TextBlock 中显示的文本量受到限制。对我有用的是将文本分成段落,将每个段落放在单独的 TextBlock 中并将所有内容添加到 StackPanel。

    this blog post中有一个已实施的解决方案

    【讨论】:

    • 我的数据是动态的。它来自一个解析 xml 的 API
    • @AtìfShabër 我明白这一点。收到文本后,将其拆分为多个段落,如果可以确定该文本没有特别大的段落。或者尝试链接中的 ScrollableTextBlock,它允许像在 TextBock 中一样进行简单绑定,但我不确定它在阻止文本的地方是否看起来不错。
    • 尝试了您的解决方案。做了一个自定义控件。但是代码中的 GetTextBlock() 和 GetMaxTextSize() 给了我一个错误:未找到
    • @AtìfShabër 代码不完整,附上的源码链接已经失效,所以只能做个方向。试试这个链接:blogs.msdn.com/b/stankovski/archive/2013/08/27/… 它似乎以更好的方式分割文本。我自己在这种情况下只是在换行符处拆分文本。
    猜你喜欢
    • 2013-06-30
    • 2012-11-18
    • 2010-11-05
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多