Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
1

RichTextBox, FlowDocument и скроллинг

20.02.2011, 23:05. Показов 5560. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Немного предыстории. Я немного отдаленный от WPF, занимаюсь разработкой WinForms приложений. Но, понадобилось в WinForms-приложении текстовый редактор с возможностью нормального создания таблиц. ActiveX-компоненты, которые позволяли взаимодействовать с Word-ом отсеялись в виду своей глючности. WinForm-оский RichTextBox не располагает возможностью нормально работать с таблицами. Попробовали работать с WPF-ным RichTextBox-ом, пока все нравится. А теперь перейдем к проблеме.

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

Вопрос: как сделать так, чтобы документ в RichTextBox горизонтально был отображен полностью и если размеров RichTextBox-а для этого не хватает, чтобы был горизонтальный скроллинг.

В вложениях есть иллюстрация желаемого эффекта.
Миниатюры
RichTextBox, FlowDocument и скроллинг  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2011, 23:05
Ответы с готовыми решениями:

Открыть существующий FlowDocument в RichTextBox через TreeView
Добрый день! После дня Гугла, решения вопроса не нашел. Если кто знает. подскажите пожалуйста:...

Не срабатывает событие при клике на ссылку в RichTextBox или FlowDocument
Добрый день! Есть следующий код: <Window x:Class="DocumentViewerWpf.MainWindow" ...

Не работает программный скроллинг в richTextBox
Собственно следующий код реализует только когда мышкой тянишь скрол-полоску, и работает только...

Как сделать синхронный скроллинг двух RichTextBox
Пушу свой блокнот, для редактирования кода. Не как не могу сделать так чтобы RichTextBox в котором...

9
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.02.2011, 00:04 2
Не то?
C#
1
2
3
4
5
        public MainWindow()
        {
            InitializeComponent();
            this.richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
        }
0
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
21.02.2011, 00:11  [ТС] 3
Нет( Во-первых оно по умолчанию стоит так, а во-вторых не помогает(
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.02.2011, 00:16 4
Ну у меня по умолчанию стоит Hidden

Вот выложили бы отдельный проект с данной бедой, может решение бы и нашлось. А так наугад воспроизводить проблему не то что не охото, а просто не понятно, как её воспроизвести.
Миниатюры
RichTextBox, FlowDocument и скроллинг  
0
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
21.02.2011, 15:02  [ТС] 5
Проект приложен. Рядом с ним лежит документ-шаблон, который можно открыть. Можете использовать любой свой dot или rtf. Как вы заметите, ни горизонтальной, ни вертикальной прокрутки нету. А хотелось бы, чтобы была.
Вложения
Тип файла: zip rtb.zip (109.5 Кб, 55 просмотров)
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.02.2011, 17:24 6
То есть вам нужно в результате это? Пока попробую к вам в проект это дело запихать.
Вложения
Тип файла: rar Wpf_RTB.rar (6.4 Кб, 71 просмотров)
1
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
21.02.2011, 17:38  [ТС] 7
Да, именно то.

Надеюсь, Вы задаете размер не жестко для формата А4?

Да можете не запихивать, то тестовый. Можете и свой проект бросить, я разберусь. Или просто рассказать как достичь данного эффекта. Наверняка кто-то когда-то еще с этим столкнется. Мне уже полегчало, что так можно сделать) Спасибо.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.02.2011, 17:59 8
Цитата Сообщение от nicolaus2 Посмотреть сообщение
Надеюсь, Вы задаете размер не жестко для формата А4?
Я вообще ничего не задавал. И не совсем понял, что вы имели ввиду


Что-то я не понял, почему в вашем тестовом проекте не правильно отображаются полосы прокрутки.

Цитата Сообщение от nicolaus2 Посмотреть сообщение
Или просто рассказать как достичь данного эффекта.
Вообще вот код окна, но в WPF проекте:
XML
1
2
3
4
5
6
7
8
9
10
11
<Window x:Class="Wpf_RTB.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Главное окно" Height="350" Width="525" TextOptions.TextFormattingMode="Display">
    <Grid>
        <ScrollViewer Name="scrollViewer1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" CanContentScroll="True" Margin="0,0,0,38">
            <RichTextBox Name="richTextBox1"/>
        </ScrollViewer>
        <Button Content="Загрузить" HorizontalAlignment="Left" Margin="12,0,0,7" Name="btnLoad" Width="92" Height="23" VerticalAlignment="Bottom" Click="btnLoad_Click" />
    </Grid>
</Window>
XML
1
TextOptions.TextFormattingMode="Display"
Это появилось в Framework 4.0, благодаря этой строчке все дочерние элементы окна выглядят не размыто. Ну вы видели, как выглядит текст кнопки "Загрузить" в архиве приложенном к моему прошлому сообщению.

В вашем тестовом проекте появились какие-то полосы, но чьи это полосы не понятно. Там помоему, что-то с изменением размеров не правильно. Ваш тестовый проект скачайте и поглядите, я там что-то намутил, появились полосы, но они как-то не правильно прокручивают. Я просто не совсем понял, как там, что меняется в размерах в UserControl.

Wpf_RTB_Project_VS2010.rar это проект WPF с работающими полосами прокрутки.
Вложения
Тип файла: rar rtb.rar (85.9 Кб, 24 просмотров)
Тип файла: rar Wpf_RTB_Project_VS2010.rar (66.2 Кб, 58 просмотров)
1
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
21.02.2011, 18:19  [ТС] 9
Эх, жаль, но в проекте предел у нас пока 3.5 фреймворк.

В любом случае, пришли к выводу, что контрол обладает желаемым свойством и его неверное поведение в WinForms вызвано неверным поведением его родителей(контейнер или контрол).

Вечером дома посмотрю. Может еще появятся вопросы.

Большое спасибо.
0
0 / 0 / 1
Регистрация: 19.06.2014
Сообщений: 100
05.06.2015, 00:24 10
Casper-SC, здравствуйте!
Может, вы мне подскажите, как мне сделать горизонтальный скролл в RichTextBox, если помещённая в него картинка не помещается?

XML
1
2
3
4
5
6
7
8
<FlowDocumentReader Margin="0,78,11,-2" Grid.Column="1">
            <FlowDocument>
                <Paragraph>
                    <RichTextBox Name="Window_2" FontSize="14" Block.LineHeight="1" FontFamily="Times New Roman">
                    </RichTextBox>
                </Paragraph>
            </FlowDocument>
        </FlowDocumentReader>
а код такой:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private void Button_Click_4(object sender, RoutedEventArgs e)
        {
            try
            {
                string _imgPath = GetImagePath();
                if (_imgPath == "")
                    return;
                Image image = new Image();
                image.Stretch = Stretch.None;
                BitmapImage bmp = new BitmapImage(new Uri(_imgPath, UriKind.Relative));
                image.Source = bmp;
                image.Tag = "<:help:>";
                Window_2.BeginChange();
                TextPointer tp = Window_2.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
                InlineUIContainer imageContainer = new InlineUIContainer(image, tp);
                Window_2.CaretPosition = imageContainer.ElementEnd;
                Window_2.EndChange();
                Window_2.Focus();
            }
            catch { }
        }
 
        private string GetImagePath()
        {
            OpenFileDialog o = new OpenFileDialog();
            o.Multiselect = false;
            o.ShowReadOnly = false;
            o.RestoreDirectory = true;
            o.ReadOnlyChecked = false;
            o.Filter = "Images|*.png;*.bmp;*.jpg;*.jpeg;*.gif;*.tif;*.tiff,*.wmf;*.emf";
            if (o.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                return o.FileName;
            }
            else
            {
                return "";
            }
        }
Добавлено через 20 секунд
Буду очень благодарна!
0
05.06.2015, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 00:24
Помогаю со студенческими работами здесь

Как выполнить скроллинг в RichTextBox используя внешний компонент
Например, с помощью TrackBar. Попробовал использовать ScrollToCaret(): текст скроллится, ползунок...

flowdocument to pdf
Сущетствует ли возможность сохранить flowdocument как pdf файл? Спасибо.

FlowDocument. Загрузка, освобождение.
Пишу новости для отображения в программе, которая будет у пользователей. Сохраняю новость в проге...

Убрать интерфейс у FlowDocument
В продолжение этой темы. Напомню: делаю чат, искал способ отображения списка сообщений, нашел в...

Не включает FlowDocument в DataContract
Доброго времени суток. На данный момент пишу службу для обмена сообщениями, вот контракт: ...

Контрол для скролинга во FlowDocument
Добрый день. Делаю страницу на которой желаю разместить безусловно полезную информацию, но не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru