[英]XAML - Create really long TextBlock
I'm writing an app that calculates all prime numbers from 0 to a number specified by the user. 我正在编写一个应用程序,该应用程序可以计算从0到用户指定的所有素数。 My algorythm works fine, but it seems that the TextBlock is limited in height: round about at the 500 it doesn't continue to write the numbers. 我的算法工作正常,但似乎TextBlock的高度有限:大约在500左右,它不会继续写数字。 I can still scroll down but the numbers don't appear any longer. 我仍然可以向下滚动,但数字不再显示。 XAML: XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ScrollViewer>
<StackPanel Name="stack">
<TextBlock>Calculate prime numbers from</TextBlock>
<TextBox Name="from"></TextBox>
<TextBlock>to</TextBlock>
<TextBox Name="to"></TextBox>
<Button Name="Run" Click="run">Calculate prime numbers!</Button>
<TextBlock Name="result">Hallo</TextBlock>
</StackPanel>
</ScrollViewer>
</Grid>
C#: C#:
public void run(object sender, RoutedEventArgs e)
{
int min; int.TryParse(from.Text, out min);
int max; int.TryParse(to.Text, out max);
List<int> numbers = new List<int>();
for (int i = min; i <= max; i++)
{
numbers.Add(i);
}
int checknext = 2;
while (checknext < Math.Sqrt(max))
{
for (int i = numbers.Count - 1; i >= 0; i--)
{
if (!(numbers[i] == checknext))
{
if (numbers[i] % checknext == 0)
numbers.RemoveAt(i);
}
}
checknext++;
}
result.Text = "";
result.MaxHeight = double.MaxValue;
for (int i = 0; i < numbers.Count; i++)
{
result.Text += numbers[i].ToString() + "\n";
}
}
Try this way 试试这个
XAML code XAML代码
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ScrollViewer>
<StackPanel Name="stack">
<TextBlock>Calculate prime numbers from</TextBlock>
<TextBox Name="from"></TextBox>
<TextBlock>to</TextBlock>
<TextBox Name="to"></TextBox>
<Button Name="Run" Click="run">Calculate prime numbers!</Button>
<ListBox x:Name="lstbx" Visibility="Visible" Height="300" Margin="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<StackPanel Name="stkpnlMsg" Margin="0">
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" Width="300" Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="{Binding number}" Padding ="0,0,0,10" FontSize="20" FontWeight="Normal" ></TextBlock>
</Grid>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</ScrollViewer>
</Grid>
C# Code C#代码
Step 1 : Declare this list 步骤1:声明此列表
public List<BindData> dataSource;
Step 2 : 第2步 :
public class BindData
{
public string number { get; set; }
}
Step 3 : 第三步:
public void run(object sender, RoutedEventArgs e)
{
dataSource = new List<BindData>();
dataSource.Clear();
int min; int.TryParse(from.Text, out min);
int max; int.TryParse(to.Text, out max);
List<int> numbers = new List<int>();
for (int i = min; i <= max; i++)
{
numbers.Add(i);
}
int checknext = 2;
while (checknext < Math.Sqrt(max))
{
for (int i = numbers.Count - 1; i >= 0; i--)
{
if (!(numbers[i] == checknext))
{
if (numbers[i] % checknext == 0)
numbers.RemoveAt(i);
}
}
checknext++;
}
for (int i = 0; i < numbers.Count; i++)
{
dataSource.Add(new BindData() { number = numbers[i].ToString() });
}
this.lstbx.ItemsSource = dataSource;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.