сколько символов может содержать текстовый блок Silverlight? - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь вставить лицензионное соглашение с конечным пользователем (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. на самом деле, я даже не вижу вертикальную полосу прокрутки. я не знаю, если это наблюдение, потому что я все еще смотрю пользовательский интерфейс через эмулятор.

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

Ответы [ 3 ]

8 голосов
/ 07 июля 2011

Нет UIElement может быть больше 2048 пикселей в любом направлении (высота или ширина).Любой контент, который будет отображаться за пределами этой области, не отображается. Пространство для размещения этого содержимого зарезервировано в визуальном дереве.

Обходной путь для этого заключается в использовании нескольких элементов для отображения большого количества текста.

Обновление
Я написал собственные парсеры для динамического отображения контента такого рода.Хотя в идеале вы не будете работать с большими блоками текста во время выполнения.Это может быть еще сложнее, когда текст содержит ссылки (на другие страницы, веб-контент или средства запуска электронной почты).

Если вы хотите отобразить лицензионное соглашение или какой-либо большой фрагмент текста, вам не захочется упростить его дляпользователь для чтения и навигации.В конце концов, вы включаете текст так, как вы хотите, чтобы пользователь его читал.

Если у вас есть текст во время разработки, вы должны воспользоваться возможностью, чтобы убедиться, что он выложен правильно и использует отдельные TextBlocks для разных разделов истилизация заголовков и подзаголовков может помочь вам сделать это.

0 голосов
/ 13 октября 2016

Я хочу поделиться с вами этим кодом.Он создает несколько текстовых блоков и добавляет их в Stackpanel в качестве дочерних элементов.Вы можете создать панель стека в средстве просмотра Scroll, так как 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;
    }
0 голосов
/ 07 июля 2011

Это может быть несколько вещей - высота вашего текстового блока может быть ограничена другим элементом управления, стиль, который вы применили к тексту, может вызывать его ...

Вы можете опубликовать свой источник?1003 *

...