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

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

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

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

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

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

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

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

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

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

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

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

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

Откуда: г. Пермь
Сообщений: 3311
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

меня удивляет что ты не опытный, если делаешь псевдомодальность(фоном) вместо немодальности.
Роман тут ни при чём.
5 ноя 18, 13:41    [21724147]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить