我正在尝试将最终用户许可协议(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>
答案 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;
}