Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Я с очередным "детским" вопросом.
Столкнулся с такой потребностью. Два окна. Из первого несколько раз вызывается второе в модальном режиме. После завершения работы второго управление возвращается в первое. Всё бы ничего, но во втором значительное количество контролов, состояние которых между между вызовами желательно сохранять. Понятно, что это можно сделать через сохранение данных в коде.
Но гораздо проще было бы скрыть второе, чтобы вернулось управление в первое окно. Но в модальном режиме, скрыть окно нельзя.
Какой наиболее простой и правильный способ для решения этого?
4 ноя 18, 21:57    [21723811]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Если используется MVVM, то проблем нет, модель-то можно не убивать.
Или речь идет о сохранении состояния скроллеров и тому подобное?
4 ноя 18, 21:59    [21723815]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
Если используется MVVM, то проблем нет, модель-то можно не убивать.
Или речь идет о сохранении состояния скроллеров и тому подобное?

Да, состояния элементов окна. Данные понятно в модели и модели представления сохраняются.
Просто не хотелось сохранять состояние каждого контрола. Вот и думаю об обходных путях.
4 ноя 18, 22:14    [21723821]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Лично я никогда не делал несколько окон в WPF-приложениях.
Либо вкладки, как в браузере, либо выводится некое диалоговое псевдоокно поверх всего содержимого основного окна - фактически прямоугольник с границами, а поля вокруг него затеняются полупрозрачностью.
4 ноя 18, 22:17    [21723823]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
Лично я никогда не делал несколько окон в WPF-приложениях.
Либо вкладки, как в браузере, либо выводится некое диалоговое псевдоокно поверх всего содержимого основного окна - фактически прямоугольник с границами, а поля вокруг него затеняются полупрозрачностью.
Мне просто при работе второго окна нужно сохранять видимость первого. Информация из него упрощает работу во втором. Но изменять эту информацию пока открыто второе нельзя - возможны коллизии.
4 ноя 18, 22:26    [21723826]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Eld Hasp
Но изменять эту информацию пока открыто второе нельзя - возможны коллизии.
так заблокируй редактирование Window.IsEnabled=false. Либо можно поиграться с Focusable, если принципиально, чтобы не изменялся внешний вид
4 ноя 18, 22:30    [21723829]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
...... так заблокируй редактирование Window.IsEnabled=false. Либо можно поиграться с Focusable, если принципиально, чтобы не изменялся внешний вид
То есть вызывать второе обычным Show, а перед его скрытием разблокировать первое. Да, вариант.
Только надо продумать как в первом узнать, что второе скрылось. При использовании ShowDialogs необходимость в этом не было.
Подумаю....
4 ноя 18, 22:41    [21723832]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Роман где-то выкладывал свой менеджер окон.
Попробуй поискать среди его постов в WPF
4 ноя 18, 22:51    [21723837]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3171
создайте элемент управления, и открывайте (добавляйте в новое окно) его каждый раз в новом окне, он будет сохранять свое состояние. если использовать чисто модель, то не все состояния будут сохраняться.
4 ноя 18, 22:52    [21723838]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Roman Mejtes
создайте элемент управления, и открывайте (добавляйте в новое окно) его каждый раз в новом окне, он будет сохранять свое состояние. если использовать чисто модель, то не все состояния будут сохраняться.
А где он будет жить между сеансами? Просто в переменной?
4 ноя 18, 22:57    [21723844]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
Roman Mejtes
создайте элемент управления, и открывайте (добавляйте в новое окно) его каждый раз в новом окне, он будет сохранять свое состояние. если использовать чисто модель, то не все состояния будут сохраняться.
А где он будет жить между сеансами? Просто в переменной?
........?
Создать в коде и потом просто добавлять в окно....
Или, наоборот. В коде просто сохранить ссылку на него. При закрытии окна элемент не закроется? А при новом открытии присвоить элементу значение из ссылки.
Такое, что - сработает?
4 ноя 18, 23:05    [21723850]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3171
Shocker.Pro,

ну трудно сказать. где ему жить, зависит от ситуации. Точно такая же фигня есть в TabControl'е, так как вкладки в нём являются по сути не элементами управления, а шаблонами. Когда его переделывал, такие элементы управления генерировались внутри него и ссылки хранились на объект. Таким образом переключался уже не шаблон, а элементы управления с заданными шаблонами.

Любой объект, можно сохранить в ресурсах, типа такого:
Как видно из примера, CheckBox'ы к модели не привязаны, но их состояние сохраняется, сколько бы раз я не открыл окно. Естественно, если открыть 2а окна с этим элементом управления, будет плохо :) по этому, такой вариант лучше исключить.

<Window x:Class="WpfApp7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp7"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ContentControl x:Key="MyContent">
            <StackPanel>
                <CheckBox Content="Item1"/>
                <CheckBox Content="Item2"/>
                <CheckBox Content="Item3"/>
                <CheckBox Content="Item4"/>
                <CheckBox Content="Item5"/>
                <CheckBox Content="Item6"/>
            </StackPanel>
        </ContentControl>
    </Window.Resources>
    <Grid>
        <Button Padding="10,5" HorizontalAlignment="Center" VerticalAlignment="Center"
                Content="Open Dialog Window" Click="Button_Click"/>
    </Grid>
</Window>

using System.Windows;

namespace WpfApp7
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var dialogWindow = new Window { Content = FindResource("MyContent") };
            dialogWindow.ShowDialog();
        }
    }
}
4 ноя 18, 23:54    [21723879]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Roman Mejtes
Точно такая же фигня есть в TabControl'е, так как вкладки в нём являются по сути не элементами управления, а шаблонами.
Ага, раз попытался использовать TabControl через ItemsSource - обплевался и сделал небольшую надстройку, которая добавляет вкладки кодом.
5 ноя 18, 00:03    [21723880]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Автор, так и не объяснил что за состояние если есть модель. Тебя ведь вспомнит за тобой программист за велосипед.
5 ноя 18, 08:29    [21723937]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Shocker.Pro
Если используется MVVM, то проблем нет, модель-то можно не убивать.
Или речь идет о сохранении состояния скроллеров и тому подобное?

Да, состояния элементов окна. Данные понятно в модели и модели представления сохраняются.
Просто не хотелось сохранять состояние каждого контрола. Вот и думаю об обходных путях.
переведи. Не знаешь разницу модального, скрытого и нк модального? А также "всегда наверху"?
Я как пользователь, всегда должен ожидать поведение ИС. А тут изобретаем полумодальное.
5 ноя 18, 08:36    [21723938]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Petro123
Автор, так и не объяснил что за состояние если есть модель.
Некоторые состояния контролов в модели не сохраняются, например состояние прокрутки скроллера.
5 ноя 18, 10:16    [21723962]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Shocker.Pro
Petro123
Автор, так и не объяснил что за состояние если есть модель.
Некоторые состояния контролов в модели не сохраняются, например состояние прокрутки скроллера.
это всегда лет 20 руками делали в датасете либо немодал окно.
Пользователь же не совсем дурак. Он понимает когда окно скрыто, а когда модальное.
5 ноя 18, 12:05    [21724044]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Кроме скролла все?
А то выходит что в WPF как то сложно все с элементарными действиями.
5 ноя 18, 12:07    [21724051]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Petro123
Кроме скролла все?
А то выходит что в WPF как то сложно все с элементарными действиями.
состояние раскрытия узлов дерева, элемент, на котором фокус, выделение в текстбоксах и т.д. и т.п.

Petro123
это всегда лет 20 руками делали в датасете либо немодал окно.
Пользователь же не совсем дурак. Он понимает когда окно скрыто, а когда модальное.
Какой-то бессвязный набор слов, причем тут вообще датасет и пользователь. Если ты в винформах выгрузишь окно, то контролы точно так же не сохранят свое состояние, так что какие у тебя претензии к WPF - непонятно. Привык бревна пилить ножовкой - тебе на электропилу и не стоит переходить )
5 ноя 18, 12:34    [21724086]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Shocker.Pro
состояние раскрытия узлов дерева, элемент, на котором фокус, выделение в текстбоксах и т.д. и т.п.

вот если автор так скажет...про выделение в текстовом поле....и хочу его сохранить.
То ему прямая дорога в НЕ модальное окно.
Не очевидно? Будешь спорить?
А то счас насоветуем...велосипедов.
5 ноя 18, 13:23    [21724130]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
Shocker.Pro
пропущено...
Некоторые состояния контролов в модели не сохраняются, например состояние прокрутки скроллера.
это всегда лет 20 руками делали в датасете либо немодал окно.
Пользователь же не совсем дурак. Он понимает когда окно скрыто, а когда модальное.

Я сразу, написал что знаю как это "руками" в коде сделать. Интересовался нет ли другого более удобного способа.
Кроме скролов на форме есть ещё элементы которые влияют друг на друга (выделения, затенения, разный вид отображения и т.п.). Но так как это только для визуального удобства я не выносил это в VM.

Познакомился с WPF меньше 4 месяцев назад, с C# на месяц раньше. Поэтому и задаю "детские" вопросы чтобы "не изобретать велосипед", а пользоваться общепринятыми (если они есть) подходами к решению задач.
5 ноя 18, 13:26    [21724131]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Petro123
вот если автор так скажет...про выделение в текстовом поле....и хочу его сохранить.
То ему прямая дорога в НЕ модальное окно.
Не очевидно? Будешь спорить?
А я и не советую модальное окно, я их не люблю. Роман уже дал адекветный ответ, тут внезапно проснулся Петя, и начал пытаться выяснять, о чем тут вообще взрослые дяди говорят. Вот видишь, человек 4 месяца в WPF и уже гораздо опытней тебя )
5 ноя 18, 13:30    [21724136]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Но так как это только для визуального удобства я не выносил это в VM.

это выносят в настройки окна которые сохраняются на диск.
Например, текущая вкладка из многих вкладок. Положение окна.
Разумеется выделение текстовых полей не сохраняют в настройках. Просто меняют с модального на не модальный.
Логично?
5 ноя 18, 13:39    [21724145]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
А я и не советую модальное окно, я их не люблю. Роман уже дал адекветный ответ, тут внезапно проснулся Петя, и начал пытаться выяснять, о чем тут вообще взрослые дяди говорят. Вот видишь, человек 4 месяца в WPF и уже гораздо опытней тебя )

По результатам экспериментов. Наиболее близкое поведение к желаемому получилось добиться используя Ваш совет о запрете редактирования в окне.
Он проще встраивается в уже созданное.
А на будущее возможность варианта Романа, конечно, буду учитывать. Это более основательный подход.
5 ноя 18, 13:41    [21724146]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Shocker.Pro
Вот видишь, человек 4 месяца в WPF и уже гораздо опытней тебя )

меня удивляет что ты не опытный, если делаешь псевдомодальность(фоном) вместо немодальности.
Роман тут ни при чём.
5 ноя 18, 13:41    [21724147]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
меня удивляет что ты не опытный, если делаешь псевдомодальность(фоном) вместо немодальности.
Роман тут ни при чём.
У меня есть очень давний опыт работы. Это когда ещё были Fortran, Си без плюсов и т.п. Потом долгое время практически не программировал. Только время от времени ограничено использовал VBA. Желание было, не было возможности (в основном времени). Сейчас такая возможность появилась. Пытаюсь ею воспользоваться.
5 ноя 18, 13:46    [21724157]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
По результатам экспериментов. Наиболее близкое поведение к желаемому получилось добиться используя Ваш совет о запрете редактирования в окне.
Он проще встраивается в уже созданное.

Ну.
Т.е. ты сделал окно не модальным!
А дальше запрещай или подсвечивай или скрывай всё окно.
Нет проблем.
Проблема была в модальности )))
5 ноя 18, 13:48    [21724158]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
Eld Hasp
Но так как это только для визуального удобства я не выносил это в VM.

это выносят в настройки окна которые сохраняются на диск.
Например, текущая вкладка из многих вкладок. Положение окна.
Разумеется выделение текстовых полей не сохраняют в настройках. Просто меняют с модального на не модальный.
Логично?
Да, это понятно.
Но мне такого "глобального" сохранения между вызовами приложения не нужно.
Под "Просто меняют с модального на не модальный" Вы же имеете ввиду разные методы показа окна Show и ShowDialog?
Или после показа ShowDialog можно изменить модальность? Разве такое возможно? Или я заблуждаюсь?
5 ноя 18, 13:52    [21724162]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Petro123
меня удивляет что ты не опытный, если делаешь псевдомодальность(фоном) вместо немодальности.
Роман тут ни при чём.
У меня есть очень давний опыт работы. Это когда ещё были Fortran, Си без плюсов и т.п. Потом долгое время практически не программировал. Только время от времени ограничено использовал VBA. Желание было, не было возможности (в основном времени). Сейчас такая возможность появилась. Пытаюсь ею воспользоваться.

Тут разговор только о логичности в окнах винды:
- модальное - это всё кроме окна недоступно и оно уничтожается при закрытии
- не модальное - это окно можно скрыть и опять показать например на клавишу Tab как в фотошоп.
При немодальном окне закрывать все контролы от доступа не имеет смысла.
Только в качестве костыля который ты счас сделал.
Надеюсь временно.
Логично?
Удачи!
5 ноя 18, 13:53    [21724164]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Под "Просто меняют с модального на не модальный" Вы же имеете ввиду разные методы показа окна Show и ShowDialog?

да.
Не надо менять модальность.
Родил модальное окно - его и показывай.
5 ноя 18, 13:56    [21724168]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
Eld Hasp
По результатам экспериментов. Наиболее близкое поведение к желаемому получилось добиться используя Ваш совет о запрете редактирования в окне.
Он проще встраивается в уже созданное.

Ну.
Т.е. ты сделал окно не модальным!
А дальше запрещай или подсвечивай или скрывай всё окно.
Нет проблем.
Проблема была в модальности )))

Проблема была в том, что изначально сделал модальным. Потом при тестовой эксплуатации выяснилось, что удобнее будет сохранять состояние контролов окна между вызовами.
Сразу сделать просто немодальным не получилось. Не пришла в голову мысль о том, что можно всё окно сделать доступным только для чтения. И нужно переделать вызов и передачу параметров между окнами.
5 ноя 18, 13:56    [21724171]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Shocker.Pro
А я и не советую модальное окно, я их не люблю

ты делаешь псевдомодальность как в эксплорере. Чего я не люблю))).
Удачи!
5 ноя 18, 13:59    [21724175]     Ответить | Цитировать Сообщить модератору
 Re: Скрытие модального окна.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Проблема была в том, что изначально сделал модальным. Потом при тестовой эксплуатации выяснилось, что удобнее будет сохранять состояние контролов окна между вызовами.
Сразу сделать просто немодальным не получилось. Не пришла в голову мысль о том, что можно всё окно сделать доступным только для чтения. И нужно переделать вызов и передачу параметров между окнами.

да.
Я понял. Временное решение и временный костыль.
Я знаю что смену на не модальность надо много переделать.
Удачи!
5 ноя 18, 14:01    [21724180]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / WPF, Silverlight Ответить