Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
titan4ik
167 / 136 / 20
Регистрация: 08.01.2017
Сообщений: 675
1

Как вытащить весь текст из TextBlock?

17.01.2017, 23:17. Просмотров 825. Ответов 7
Метки нет (Все метки)

В приложении WPF в XAML определен TextBlock, затем в коде с# предпринята попытка показать текст из него с помощью MessageBox.Show(), но в результате показывается только первый фрагмент "Далее показан". Как показать всё?
XAML:
<TextBlock Name="tb">
Далее показан <Bold>жирный текст</Bold>, <Italic Background="#FFC3B3B3">курсивный текст</Italic>
и <Bold><Italic>жирный текст с курсивом</Italic></Bold>.
</TextBlock >

C#
1
2
3
4
5
 public MainWindow()
        {
            InitializeComponent();
            MessageBox.Show(tb.Text);         
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2017, 23:17
Ответы с готовыми решениями:

Форматированный текст в TextBlock
Добрый день ув.Форумчане. Мне потребовалось сделать форматированный текст в...

Вертикальный текст в TextBlock
Здравствуйте! Подскажите пожалуйста как изменить направление текста в...

Связать текст TextBlock с объектом
Здравствуйте! Мне нужно связать текст TextBlock с объектом. Не знаю, как...

Не влазит текст в динамически созданые TextBlock
Обрезает не зависимо от количества символов . ScrollViewer...

Перевести текст, отображаемый в TextBlock в верхний регистр
Как сделать средствами xaml текст отображаемый в TextBlock в верхний регистр?...

7
amarf
Жуткая тВарЬ
381 / 317 / 134
Регистрация: 06.02.2015
Сообщений: 960
Записей в блоге: 1
Завершенные тесты: 3
18.01.2017, 06:45 2
Ну наверно делать это не в конструкторе и дождаться пока окно загрузит все свои компоненты
1
titan4ik
167 / 136 / 20
Регистрация: 08.01.2017
Сообщений: 675
18.01.2017, 12:36  [ТС] 3
Не в конструкторе? Что это означает? Где это тут "в конструкторе"? И как "дождаться пока окно загрузит все компоненты"?
0
novikov.ea
1018 / 788 / 285
Регистрация: 10.06.2011
Сообщений: 1,490
18.01.2017, 13:16 4
Цитата Сообщение от titan4ik Посмотреть сообщение
Где это тут "в конструкторе"?
Конструктор - это вот:
C#
1
2
3
4
5
6
//Конструктор
public MainWindow()
{
    InitializeComponent();
    MessageBox.Show(tb.Text);         
}
Цитата Сообщение от titan4ik Посмотреть сообщение
И как "дождаться пока окно загрузит все компоненты"?
А погуглить вначале?
C#
1
2
3
4
5
6
7
8
9
class MainWindow
{
    ....
 
    protected override OnLoaded(/**/)
    {
        MessageBox.Show(tb.Text);
    }
}
2
titan4ik
167 / 136 / 20
Регистрация: 08.01.2017
Сообщений: 675
18.01.2017, 15:27  [ТС] 5
Спасибо...
То есть Main (метод, с которого начинает работу приложение) приложения WPF - это "конструктор"?
И вы определяете (переопределяете) метод OnLoaded() со странными параметрами в виде слеш и звездочек..ммм... ок попробую разобраться. А вызывается метод все-равно ведь - в "конструкторе"?
И какую книгу по этой теме правильно прочитать, чтобы не задавать подобных дурацких вопросов и не гуглить?
0
novikov.ea
1018 / 788 / 285
Регистрация: 10.06.2011
Сообщений: 1,490
18.01.2017, 16:10 6
Лучший ответ Сообщение было отмечено titan4ik как решение

Решение

Цитата Сообщение от titan4ik Посмотреть сообщение
То есть Main (метод, с которого начинает работу приложение) приложения WPF - это "конструктор"?
Нет. Main - это метод, а не конструктор. Про конструкторы вот и вот. Конструктор инициализирует объект при его создании. Прочитаете в статье, это основы основ)
Цитата Сообщение от titan4ik Посмотреть сообщение
И вы определяете (переопределяете) метод OnLoaded() со странными параметрами в виде слеш и звездочек
Нет. Слэши и звёздочки - это комментарий, символизирующий, что у метода должны быть аргументы, но я не помню по памяти их количество и типы. Недолгое гугление говорит о том, что я ошибся и метода OnLoaded нет. Вместо этого нужно подписаться на событие Loaded и в обработчике производить необходимые действия:
C#
1
2
3
4
5
6
7
8
9
10
11
MainWindow()
{
    InitializeComponent();
    Loaded += MyWindow_Loaded;
}
 
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
    Loaded -= MyWindow_Loaded;
    MessageBox.Show(tb.Text);  
}
Цитата Сообщение от titan4ik Посмотреть сообщение
И какую книгу по этой теме правильно прочитать, чтобы не задавать подобных дурацких вопросов и не гуглить?
Литература по C#
Литература по WPF
1
titan4ik
167 / 136 / 20
Регистрация: 08.01.2017
Сообщений: 675
18.01.2017, 17:54  [ТС] 7
Цитата Сообщение от novikov.ea Посмотреть сообщение
Конструктор - это вот:
C#
//Конструктор
public MainWindow()
{
InitializeComponent();
MessageBox.Show(tb.Text);
}
Вы писали "конструктор - это вот:" Так где там конструктор?
То, что метод InitializeComponent() создаёт визуальную часть из XAML (то есть, собственно окошко) это я "читал", про "конструкторы" тоже.
Ок, буду разбираться сам.
Кстати, литература по ссылкам старая довольно. Новичка напрягает, когда читаешь не про VS 2015.

Добавлено через 42 минуты
novikov.ea, информирую, что ваши рекомендации пока не помогли. Сделал вроде бы всё, как вы предложили (в исправленном варианте) и всё-равно показывает так же - первую часть текстового содержания.
???
Интересно.
0
novikov.ea
1018 / 788 / 285
Регистрация: 10.06.2011
Сообщений: 1,490
18.01.2017, 18:23 8
Лучший ответ Сообщение было отмечено titan4ik как решение

Решение

На скороую руку код будет примерно таким
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
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Loaded += MyWindow_Loaded;
    }
 
    private void MyWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Loaded -= MyWindow_Loaded;
        var text = GetFullText(tb);
        MessageBox.Show(text);
    }
 
    private static string GetFullText(TextBlock textBlock)
    {
        return textBlock.Inlines.Select(GetFullText)
                        .Aggregate(string.Empty, (s, s1) => s + s1);
    }
 
    private static string GetFullText(Inline inline)
    {
        var run = inline as Run;
        if (run != null)
        {
            return run.Text;
        }
 
        var span = inline as Span;
        if (span != null)
        {
            return span.Inlines.Select(GetFullText)
                        .Aggregate(string.Empty, (s, s1) => s + s1);
        }
 
        return string.Empty;
    }
}
1
18.01.2017, 18:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 18:23

Binding и обычный текст внутри одного элемента TextBlock
Привет всем, изучаю UWP, разметка там по сути производится на XAML, и возникла...

Форматированный текст в TextBlock, TextBox, RichTextBox, какое решение будет лучше?
Имеется строка в виде html: &lt;font color='#d8ff00'&gt;Description: This is an item...

Изменить текст в TextBlock после клика на кнопке. MVVM подход. (Перевод кода с F#)
Хотел бы разобраться с MVVM подходом в C# на небольшом примере: Есть кнопка,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru