powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ProgressBar в отдельном окне
17 сообщений из 42, страница 2 из 2
ProgressBar в отдельном окне
    #39590438
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно, спасибо.
А по завершении LongOperation (то есть при завершении потока) ведь надо еще закрыть диалоговое окно с прогрессом?
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39590464
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Ясно, спасибо.
А по завершении LongOperation (то есть при завершении потока) ведь надо еще закрыть диалоговое окно с прогрессом?наверное, я не знаю :) это же ваша программа, если там по мимо прогресс бара какие то логи отображаются, то скорее всего нужно позволить пользователю закрыть окно самостоятельно с кнопки, чтоб он имел возможность ознакомиться с результатами выполнения.
я же написал, это просто пример реализации, написанный на коленке для автора за минут 20
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39590995
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для прогресса использую такой класс:
Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Effects;

namespace Utils
{
    internal class LoaderManager
    {
        public static LoaderManager Instance { get; set; }

        private Window Window { get; set; }

        private static TextBlock _textBlock;

        private static string _text;

        public static void Init(Window window, string text = "Идет загрузка данных. Пожалуйста, подождите ... ")
        {
            _text = text;

            Instance = new LoaderManager { Window = window };

            if (Instance.Window.Content is UIElement)
                InternalInit(Instance.Window.Content as UIElement);
        }
        private static void InternalInit(UIElement elem)
        {
            elem.Effect = new BlurEffect { Radius = 0 };

            Instance.Window.Content = null;

            var grid = new Grid();
            grid.Children.Add(elem);

            var border = new Border
            {
                Width = 300,
                Height = 30,
                BorderBrush = new SolidColorBrush(Colors.Gray),
                BorderThickness = new Thickness(0.5),
                Background = new SolidColorBrush(Colors.Azure),
                Visibility = Visibility.Collapsed
            };
            _textBlock = new TextBlock
            {
                Text = _text,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
                Foreground = new SolidColorBrush(Colors.Black),
            };

            border.Child = _textBlock;
         
            grid.Children.Add(border);

            Instance.Window.Content = grid;
        }

        public void ShowLoader()
        {
            if (!(Instance.Window.Content is Grid)) return;

            var grid = (Grid)Instance.Window.Content;
            var blurEffect = grid.Children[0].Effect as BlurEffect;
            if (blurEffect != null) blurEffect.Radius = 3;
            grid.IsEnabled = false;

            grid.Children[1].Visibility = Visibility.Visible;
        }

        public void HideLoader()
        {
            if (!(Instance.Window.Content is Grid)) return;

            var grid = (Grid)Instance.Window.Content;
            var blurEffect = grid.Children[0].Effect as BlurEffect;
            if (blurEffect != null) blurEffect.Radius = 0;
            grid.IsEnabled = true;

            grid.Children[1].Visibility = Visibility.Collapsed;
        }

        public void ReportProgress(int percent)
        {
            _textBlock.Text = $"{_text} {percent}%";
        }
    }

}


для многопоточности использую BackgroundWorker. Порядок действий сл.:
- в конструкторе Window, где будет идти загрузка или обработка данных пишем LoaderManager.Init(this);
- перед вызовом метода RunWorkerAsync класса BackgroundWorker пишем LoaderManager.Instance.ShowLoader();
- в DoWork делаем загрузку или обработку данных;
- в RunWorkerCompleted делаем LoaderManager.Instance.HideLoader()
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591033
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,
Тут ты в коде создаешь view контролы. Не всем нравится мешать логику и view
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591039
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_Пав,
Тут ты в коде создаешь view контролы. Не всем нравится мешать логику и view
Где мешается логика? Создаются контролы в конструкторе окна. Да, дальше из VM мы показываем и или прячем контролы. А показывать окна, т.е. то, о чем просит ТС - это не тоже самое? Хорошо, можно доработать немного класс, забиндить Visibility контрола на какое-нить свой-во VM. Доработки дальше - это уже дело вкуса. Я не сильно ломаю логику MVVM.
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_ПавСоздаются контролы в конструкторе окна.окно нужно видеть в дизайнере. Я про это. Оно видно?
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591090
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_ПавСоздаются контролы в конструкторе окна.окно нужно видеть в дизайнере. Я про это. Оно видно?
что значит нужно? Зачем? А как же динамические формы, которые налету формируются? У меня есть проект, где формы формируются с контролами из XSLT.
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591096
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,
Это имхо. Я не люблю динамику там где можно визуал верстка.
Ширина = сколько?
Не люблю))). Удачи!
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591098
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_ПавСоздаются контролы в конструкторе окна.окно нужно видеть в дизайнере. Я про это. Оно видно?
Вообще не нужно. И часто - при более-менее сложном UI - просто невозможно. Даже если там контролы не создаются динамически.
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591113
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Когда то на андроид писал, так там гугл другого мнения. Сделал ide и рекомендовал проектировать визуально.
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591281
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Супер_ПавСоздаются контролы в конструкторе окна.окно нужно видеть в дизайнере. Я про это. Оно видно?совсем не обязательно, лично я дизайнером не пользуюсь вообще, потому, что он медленный и бесполезный кусок :)
но то, что описывать внешний вид, лучше в XAML это верно, кодить нужно поведение, модели и прочее, а внешний вид определять только в XAML. Тогда всё ясно и понятно, без лишних слов и внешний вид не привязан ко всему остальному.
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591347
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesсовсем не обязательно, лично я дизайнером не пользуюсь вообще, потому, что он медленный и бесполезный кусок :)
ну, я и говорил, что есть винда и линукс. Есть люди визуально проектируют, а есть строят всякие генераторы(ГУИ с завязанными глазами)
И это хорошо!
))
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591351
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Спецам уровня Романа вовсе не нужна внешняя визуализация. Известен факт/миф(?) что (во время обыска, дабы отвлечь внимание жандармов) дедушка Ленин "вслепую" (не видя шахматной доски) выиграл у жандарма-любителя. Т.е., у спецов своя "внутренняя" визуализация)))
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591359
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,
)) верю. Он крут.
Но ты же знаешь, эти жандармы, тьфу - эти айтишники пускают наше ремесло на поток.
Т.е. чтобы кОдило как больше студентов, а не уникумов).
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591549
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так по идеи можно все упростить и засунуть прогресс-бар в Popup-окно? Разметка будет в XAML'е, управление из основной View-модели..
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591628
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,
В какое папап окно?
Обычное окно:
MyWin.initialize;
await длительная(....
MyWin.stop();
...
Рейтинг: 0 / 0
ProgressBar в отдельном окне
    #39591632
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Разметка будет в XAML'еда. И прицепом кода как можно меньше. Если command не нужен, то и не делать.
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ProgressBar в отдельном окне
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]