Silverlight TextBlock可以容纳多少个字符?

时间:2011-07-06 20:29:27

标签: windows-phone-7 textblock

我正在尝试将最终用户许可协议(EULA)放入WP7 silverlight文本块控件中。但是,它一直在截断我的文字。为什么会这样? WP7 silverlight文本块可以容纳的文字大小或字符数有限制吗?

下面是我在xaml方面所做的一个例子(其余的xaml周围是自动生成的默认值)。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ScrollViewer>
        <TextBlock x:Name="tbMsg" TextWrapping="Wrap"/>
    </ScrollViewer>
</Grid>

我也尝试过使用TextBox,但现在,我甚至无法在TextBox中滚动。我已经明确地将VerticalScrollBarVisibility设置为Visible,但我仍然无法向下滚动TextBox。事实上,我甚至没有看到垂直滚动条。我不知道这个观察是否因为我仍在通过模拟器查看UI。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <TextBox x:Name="tbMsg" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible"/>
</Grid>

3 个答案:

答案 0 :(得分:8)

任何方向(高度或宽度)都不能UIElement大于2048像素。将不显示超出此区域的任何内容。 此内容所在的空间虽然保留在可视化树中。

解决此问题的方法是使用多个元素来显示大量文本。

<强>更新
我编写了自己的解析器,用于动态显示此类内容。理想情况下,虽然您不会在运行时使用大块文本。当文本包含链接(到其他页面,Web内容或电子邮件发射器)时,这可能会更复杂。

当想要显示EULA或任何大块文本时,您不希望用户轻松阅读和导航。毕竟,您要包含文本,因为您希望用户阅读它。

如果你在设计时有文字,你应该抓住机会确保它的布局合适,并为不同的部分使用单独的TextBlocks,并且样式标题和小标题可以帮助你做到这一点。

答案 1 :(得分:0)

可能有几件事 - 文本块的高度可能受到另一个控件的约束,您应用于文本的样式可能会导致它......

你可以发布你的来源吗?

答案 2 :(得分:0)

我想与您分享此代码。它创建了许多TextBlock并将其作为子项添加到Stackpanel。您可以在Scroll viewer中创建Stackpanel,因为Scrollvewers只能直接获取单个子元素。

    //constructor
    List<char> countStoryvar = new List<char>(); //to store the text Body
    private string incStorybody;
    private int textMax = 2000;    //You can modify this.

   //methods
 private void PlaceData()
    {
        incStorybody = "Your Story Source";
        int countStory = incStorybody.Count();
        countStoryvar = incStorybody.ToList();
        double countStoryd = double.Parse(countStory.ToString());
        if (countStoryd < textMax)
        {
            TextBlock txtBlock = new TextBlock();
            txtBlock.TextWrapping = TextWrapping.Wrap;
            readStackPanel.Children.Add(txtBlock);
        }
        else
        {
            double countStoryd2 = countStoryd / textMax;  //fetch divisions
            countStoryd2 = Math.Round(countStoryd2, 5);  //getting Real no
            string sountstring = countStoryd2.ToString();
            string[] split = sountstring.Split(new string[] { "." }, StringSplitOptions.None);     //to remove decimal
            int countStoryi = int.Parse(split[0]);
            int remainder = countStory - (textMax * countStoryi);
            int iterationtimestin = countStoryi + 1;
            for (int z = 0; z < iterationtimestin; z++)
            {
                int zlast = countStoryi - 1;
                int multiple = 0;
                int multiple1 = 0;
                int multiplecounter = 0;
                multiple = textMax * z;
                if (z == 0)
                {
                    multiplecounter = textMax;
                }
                else
                {
                    if (z == countStoryi)
                    {
                        multiplecounter = countStory;

                    }
                    else
                    {
                        multiple1 = z + 1;
                        multiplecounter = textMax * multiple1;
                    }
                }
                LoadStackPanel(multiple, multiplecounter);
            }
        }

    }
    private void LoadStackPanel(int starting, int ending)
    {
        TextBlock txtBlock = new TextBlock();
        txtBlock.TextWrapping = TextWrapping.Wrap;
        for (int zi = starting; zi < ending; zi++)
        {
            incStoryInput = incStoryInput + countStoryvar[zi];
        }
        txtBlock.Text = incStoryInput;
        readStackPanel.Children.Add(txtBlock);
        incStoryInput = string.Empty;
    }