Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
1

Отключить окно, когда другое окно открыто

22.10.2019, 08:56. Показов 9448. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Вот есть у меня окно с кнопкой, по нажатию на кнопку открывается другое окно!
I wish что бы открывающиеся окно всегда открывалось в центре текущего окна и что бы нельзя было делать какие либо манипуляции в предыдущем окне, пока открыто другое окно.

MainWindow

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window x:Class="DisableWindowWhenOtherWindowOpen.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:DisableWindowWhenOtherWindowOpen"
        xmlns:VM="clr-namespace:DisableWindowWhenOtherWindowOpen.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="400">
    <Window.DataContext>
        <VM:MainWindowVM></VM:MainWindowVM>
    </Window.DataContext>
    <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button Content="Open other window"
                    Command="{Binding OpenOtherWindowCommand}"
                    ></Button>
        </StackPanel>
    </Grid>
</Window>


OtherWindow

XML
1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Class="DisableWindowWhenOtherWindowOpen.OtherWindow"
        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:DisableWindowWhenOtherWindowOpen"
        mc:Ignorable="d"
        Title="OtherWindow" Height="100" Width="200">
    <Grid>
        <TextBox>Hello World!</TextBox>
    </Grid>
</Window>


MainWindowVM

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MainWindowVM
    {
        public ICommand OpenOtherWindowCommand { get; }
 
        public MainWindowVM()
        {
            OpenOtherWindowCommand = new RelayCommand(x => OpenOtherWindow());
        }
 
        private void OpenOtherWindow()
        {
            OtherWindow otherWindow = new OtherWindow();
            otherWindow.Show();
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2019, 08:56
Ответы с готовыми решениями:

Как проверить открыто ли окно в WPF?
Как проверить открыто ли окно в WPF?

Как проверить открыто ли окно стороннего приложения?
Я не знаю как написать программу, которая бы проверяла (т.е. if окно в фокусе then), помогите, мне...

[WPF] Не открывать окно, если уже открыто
Интересует как можно автоматически сделать так, чтобы окно, если он уже открыто, не открывалось...

Как блокировать родительское окно, пока открыто дочернее?
Есть главное окно, с него по кнопке вызывается другое окно с текстбоксом. Главное при этом не...

9
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
22.10.2019, 09:38 2
Цитата Сообщение от Чипс Посмотреть сообщение
I wish что бы открывающиеся окно всегда открывалось в центре текущего окна
Для OtherWindow
XML
1
<Window ... WindowStartupLocation="CenterOwner">
При создании OtherWindow
C#
1
2
OtherWindow otherWindow = new OtherWindow();
otherWindow.Owner = this;
Цитата Сообщение от Чипс Посмотреть сообщение
что бы нельзя было делать какие либо манипуляции в предыдущем окне, пока открыто другое окно
Вызывать ShowDialog
C#
1
otherWindow.ShowDialog();
1
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
22.10.2019, 09:47  [ТС] 3
Цитата Сообщение от novikov.ea Посмотреть сообщение
При создании OtherWindow
C#
1
otherWindow.Owner = this;
Не вы выходит, пишет ошибку Рис 1

Цитата Сообщение от novikov.ea Посмотреть сообщение
Вызывать ShowDialog
Тут всё Ок!
Миниатюры
Отключить окно, когда другое окно открыто  
0
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
22.10.2019, 10:02 4
Лучший ответ Сообщение было отмечено Чипс как решение

Решение

Поскольку у вас уровни абстракций уже не соблюдаются, то можно сделать так
C#
1
otherWindow.Owner = Application.Current.Mainwindow
1
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
22.10.2019, 11:04  [ТС] 5
Цитата Сообщение от novikov.ea Посмотреть сообщение
Поскольку у вас уровни абстракций уже не соблюдаются
А как надо делать с соблюдением уровней абстракции?
0
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
22.10.2019, 11:07 6
ViewModel не должна взаимодействовать с View. А вы создаёте View во ViewModel. Посмотрите, как реализовано создание второго окна в данном примере
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
22.10.2019, 11:39  [ТС] 7
Цитата Сообщение от novikov.ea Посмотреть сообщение
Посмотрите, как реализовано создание второго окна в данном примере
А я могу скачать проект целиком или у Вас эта возможность отключена на GitHub?

Добавлено через 11 минут
Цитата Сообщение от Чипс Посмотреть сообщение
А я могу скачать проект целиком
Ага, скачал.

Добавлено через 4 минуты
Сразу возник вопрос!
Я могу использовать Ваш DialogManager в своих проектах или мне придётся подгонять его под каждый проект?

Добавлено через 6 минут
А где я могу почитать про DialogManager , я пока такого не видел.
0
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
22.10.2019, 11:42 8
DialogManager не должен изменяться, если эти изменения относятся к бизнес-логике приложения. Но его можно модифицировать в общем, добавляя функционал, касающийся только отображения окна.

Добавлено через 1 минуту
Цитата Сообщение от Чипс Посмотреть сообщение
А где я могу почитать про DialogManager , я пока такого не видел.
Его я спроектировал на основе своих соображений о реализации данного функционала, соответствующего паттерну MVVM
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,091
22.10.2019, 11:43  [ТС] 9
Цитата Сообщение от novikov.ea Посмотреть сообщение
основе своих соображений о реализации данного функционала
То есть, это не обще принятая практика?
0
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
22.10.2019, 13:52 10
Не знаю, какая является общепринятой) Иногда люди лепят, как пожелают. В больших приложениях используют фреймворки. Зачастую это PRISM. В нём своя реализация для отображения окон. Но в любом случае, что бы вы не использовали, следует соблюдать уровни абстракции: ViewModel не должна знать о View
0
22.10.2019, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2019, 13:52
Помогаю со студенческими работами здесь

WinAPI: Как нажать кнопку в другом приложении, если в нем открыто модальное окно
В общем есть пару вопросов; 1) Как по заголоку окна узнать имя класса 2) int hwnd...

Переход в другое окно
Дайте код на C#/WPF для перехода в другое окно (не на другую страницу, а окно). Спасибо заранее)

Как перейти в другое окно?
Доброго времени суток! Проблема такая: я совсем еще новичок в WPF и С#. Мне нужно перейти другое...

Передать информацию в другое окно.
Уважаемые знатоки WPF, помогите пожалуйста новичку дописать код. Заранее спасибо. Это основная...


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

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