简体   繁体   English

XAML-创建非常长的TextBlock

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM