Как сделать окно неактивным wpf

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

У меня есть окно с четырьмя кнопками для добавления, поиска, удаления и обновления запросов к базе данных.

После нажатия одной из этих кнопок я открываю новое окно с определенными элементами управления WPF для этих функций.

3 ответа

Ключ ContentControl - вы будете изменять его содержимое:

и в вашей модели зрения у вас будет свойство object WhatToShow ,

Или вы можете взглянуть на Caliburn.Micro, инфраструктуру MVVM, которая упрощает навигацию по экрану.

Я рекомендую следующий подход:

  1. поставить TabControl на ваш вид - TabControl будет использоваться для переключения между различными видами
  2. применить стиль для TabControl, который скрывает заголовки вкладок ( как скрыть заголовки элементов управления вкладками?)
  3. подготовьте модель представления для каждого вида, который будет переключаться, например, ViewModel1, ViewModel2.

подготовить модель основного вида, которая объединяет все модели переключаемых видов, например

привязать MainViewModel к TabControl:

6 объявить представление для каждой модели представления:

7 установите в MainViewModel CurrentViewModel значение ViewModel1 или ViewModel2, и будет отображаться связанный с этим видом вид модели.

Я хочу, чтобы мои окна, чтобы быть на вершине всех других окон в моем приложении только. Если я устанавливаю свойство topmost окна, оно становится поверх всех окон всех приложений, и я Дон'т, что хотите.

Вам нужно установить собственника окна.

Вы можете показать окно с помощью метода showdialog для того, чтобы блокировать окна, или вы можете показать это нормальным и это онтоп владельца без блокировки рук.

вот codeexample из отделенного кода часть - я оставил все очевидные вещи:

Вместо этого вы можете использовать всплывающее окно, которое будет всегда верхним, украсить его похожим на окно и прикрепить его полностью с вашего приложения обрабатывать событие LocationChanged от главного окна и установить свойства isopen страницы в false.

Изменить:

Я надеюсь, что вы хотите, что-то вроде этого:

Надеюсь, что это помогает.

Просто сделать это в в XAML, и удивился, что никто не запостил этот ответ. В следующем примере, в "окно" определяется в ResourceLibrary (обратите внимание на х:ключ`), но вы также можете использовать этот код XAML привязки на автономной странице типа ресурсов WPF.

Лучший способ установить эти два события, чтобы все окна приложения:

  • и, конечно, все окна, что ты хочешь быть сверху, должна быть доступна из других окон приложения. в моем случае у меня есть окно базы и еще несколько окон, которые должны быть верхней части окна моей базы, так что это было не плохо, чтобы мое окно базы экземпляру каждой другой Windows.

использование метода activate (). Это попытки вывести окно на передний план и активировать его. например, окно мни = новый XYZ(); мни.Активизировать();

Я столкнулся с очень похожей ситуации, как вы. Большинство Поиск я наткнулся заявил мне всего лишь нужно было установить владельца окна я хочу быть самым верхним в Главное окно или все окна, что называется Шоу.

В любом случае, я'пойду дальше и разместить решение, которое хорошо работает для меня.

Я создал обработчики событий для окна.Активировать и окна.Деактивирована в окне, которая должна быть Высшей в отношении моего заявления.

Он отлично работает для меня. Надеюсь, это пригодится кому-то еще. :о)

Во всплывающем окне, перегрузок метода Show() с параметром:

Затем в главном окне, назвать свой перегруженный метод Show():

Есть несколько потоков, есть's еще и "Верхний" и тег. Поиск на что, или перейти непосредственно на этот пост, который выглядит хорошо:

Здесь's не способ сделать это: сделать вашу "Верхний" в окне подписаться на другие окна событий gotfocus и lostfocus и использовать следующие обработчики событий:

Я'м ОП. После некоторых исследований и испытаний, отвечаю:

Нет, нет никакого способа сделать точно, что.

Я тоже столкнулась с той же проблемой и последующим Гугл на этот вопрос. Недавно я нашел следующие работал для меня.

Вы можете добавить к вашей теги Windows

Тогда вы можете также отображать его если вы хотите, чтобы ваши пользователи, чтобы признать это, чтобы продолжить

Сначала попробуйте его без верхней параметры и увидеть результат.

Я просто столкнулся с этой же проблемой. У меня есть настольное приложение, которое имеет несколько WPF-окна, и мне нужны мои собственные заставки, чтобы быть на вершине других окон только в мое приложение. Никакие другие окна открыты, когда моя заставка появляется, но я этого откройте файл MainWindow из моей заставке после аутентификации. Так что я просто сделал что-то похожее на то, что @GlenSlayden сделал, но в код позади, поскольку, как я уже сказал, файл MainWindow это'т для меня, чтобы привязать к:

Теперь, когда моя программа загружает все другие окна в файл MainWindow, заставки на вершине, но в то время как программа проверки подлинности пользователя, это's не верхнюю, так что вы можете нажать на какую-нибудь другую программу, и он будет прикрываться ею. Это'ы ближе всего я мог найти решения этой проблемы. Это's не подходит, потому что речь все-таки идет поверх всех других приложений, в то время как моя программа загружается после проверки подлинности, но это's не очень долго в моем случае.

начать новый проект.

зайти в проект, то новую форму окна, а затем выберите Windows форма и наименование всплеск.

настроить размер, фон, текст и т. д. По желанию.

в свойствах заставки.CS форму установить стартовую позицию: CenterScreen и верхний: правда

формы form1 добавить "с помощью системы.Потоков; и"

форма form1 класс добавить, что "Сплэш-заставка = новый всплеск (); и"

формы form1 добавить "и заставки.Показать();" и "Приложение.Функция doevents();"и

формы form1 в рамках мероприятия>>фокус>>активированный добавить "в поток.Сон(4000); заставки.Закрыть();"и

всплеск.CS как добавить в фильм "Общественный всплеск и" Добавить "эта.Цвет Фона = Цвет.Аква;" и /можно использовать любой цвет

это код для form1.в CS

  1. я обнаружил, что если вы не сделаете что-то в бассейне, то экран не будет оставаться на верхней части для первого нужна форма, чтобы активировать. Число потоков исчезнет всплеск после X секунд, так что ваша программа-это нормально.

Я просто столкнулся с такой же проблемой и нашли проблемы с установкой владельца, используя шаблон MVVM, не вызывая приложение к краху производства. У меня есть окно вид модели менеджера, которая включает в себя команду, чтобы открыть окно, используя URI окна - и я вовсе'т возможность установить владельца приложения.Файл MainWindow без сбоя приложения.

Так вместо рук, я привязан свойства topmost окна на собственность в моем окне Диспетчере Посмотреть модель, которая указывает, является ли приложение является активным в данный момент. Если приложение активно, окно на вершине, как хотелось бы. Если она не активна, другие окна могут покрыть его.

Вот что я добавил к моей модели представления: `` WindowManagerVM открытый класс : GalaSoft.MvvmLight.ViewModelBase < общественные WindowManagerVM() < Приложение.Тока.Активированный += (ы, е) =>IsAppActive = истина; Приложение.Тока.Отключается += (ы, е) => IsAppActive = ложь; >

Вот XAML, который реализует его (я использую шаблон MVVM свет с ViewModelLocator как статический ресурс в мое приложение называется локатор):

Добавление нового окна в WPF

WPF. Добавление нового окна

WPF. Выбор добавляемого элемента

Открытие нового окна

После того как окно (в моём случае - Window_AddCloth.xaml) будет создано, нужно перейти к коду главного окна (MainWindow.xaml.cs) и прописать следующий код:

new Window_AddCloth().ShowDialog(); // открытие нового окна

  • new – функция создания нового объекта/элемента;
  • Window_AddCloth() - наименование окна;
  • ShowDialog()/Show() - функция открытия окна.

Разница между функциями в том, что ShowDialog(), блокирует какое - либо взаимодействие с главным окном, пока данное окно будет открыто, а Show() позволяет взаимодействовать с двумя окнами сразу.

Репутация: нет
Всего: 0

Проблема в следущем. Есть такой язык программрования MQL4. На нём пишут автоматизированные системы торговли. Синтаксис у него такойже как в C++. Но суть не в этом.
В этом языке есть возможность вызова WIN API функций с помощью встраиваемой библиотеки user32.dll.
Вот фрагмент кода заголовка MQL библиотеки:

int UpdateWindow(int hWnd);
int EnableWindow(int hWnd,int bEnable);
int DestroyWindow(int hWnd);
int ShowWindow(int hWnd,int nCmdShow);
int SetActiveWindow(int hWnd);
int AnimateWindow(int hWnd,int dwTime,int dwFlags);
int FlashWindow(int hWnd,int dwFlags /*bInvert*/);
int CloseWindow(int hWnd);
int MoveWindow(int hWnd,int X,int Y,int nWidth,int nHeight,int bRepaint);
int SetWindowPos(int hWnd,int hWndInsertAfter ,int X,int Y,int cx,int cy,int uFlags);
int IsWindowVisible(int hWnd);
int IsIconic(int hWnd);
int IsZoomed(int hWnd);
int SetFocus(int hWnd);
int GetFocus();
int GetActiveWindow();
int IsWindowEnabled(int hWnd);
//---- miscelaneouse
int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType);
int MessageBoxExA(int hWnd ,string lpText,string lpCaption,int uType,int wLanguageId);
int MessageBeep(int uType);
int GetSystemMetrics(int nIndex);
int ExitWindowsEx(int uFlags,int dwReserved);
int SwapMouseButton(int fSwap);

Вопрос в следубщем. Какую функцию и с какими параметрами нужно вызвать, что сделать активным ранее закрытое окно?
Может быть порекомендуете другую dll библиотеку?

Репутация: 7
Всего: 118

Цитата

Какую функцию и с какими параметрами нужно вызвать, что сделать активным ранее закрытое окно?

Репутация: нет
Всего: 0

jonie, спасибо за ссылку. Я выяснил в чём была моя первая ошибка.
Мне нужно какбы свернуть или развернуть главное окно программы-терминала, где выполняется скрипт.
Так оказалось, что у этого окна 4 дочерных, вложенных одно в другое.

Поэтому приходится делать то, что в этом скрипте:

Код

Sleep(4000); //остановка выполнения на 4 сек
int hwnd_parent[5];
hwnd_parent[1] = WindowHandle(Symbol(),Period()); //идентификатор самого нижнего по иерархии окна в терминале
hwnd_parent[2] = GetParent(hwnd_parent[1]);
hwnd_parent[3] = GetParent(hwnd_parent[2]);
hwnd_parent[4] = GetParent(hwnd_parent[3]);
//----
Print("hwnd_parent1 = ",hwnd_parent[1]);
Print("hwnd_parent2 = ",hwnd_parent[2]);
Print("hwnd_parent3 = ",hwnd_parent[3]);
Print("hwnd_parent4 = ",hwnd_parent[4]);
//----Получаем названия окон------------
bufStr = "";
for(int i=1; i

Можно ли както упростить этот код, т.е. напрямую обратится к старшему идентификатору окна минуя промежуточные?

Репутация: нет
Всего: 0

Т.е. приложение допустим не свёрнуто, оно просто неактивно. Нужно сделать его активным. как.

Репутация: 7
Всего: 118

Цитата

The SetForegroundWindow function puts the thread that created the specified window into the foreground and activates the window. Keyboard input is directed to the window, and various visual cues are changed for the user. The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.

BOOL SetForegroundWindow( HWND hWnd
);

Репутация: нет
Всего: 0

Цитата(jonie @ 19.8.2007, 17:16)
а BOOL SetForegroundWindow(HWND hWnd); у тя там нету? оно тоже из user32.dll

Цитата

The SetForegroundWindow function puts the thread that created the specified window into the foreground and activates the window. Keyboard input is directed to the window, and various visual cues are changed for the user. The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.

BOOL SetForegroundWindow( HWND hWnd
);

С этой функцией получается, что окно на панели просто мигает, но не открывается.

Ты не знаеш, как отключить это мигание? Оно отвлекает сильно.

Репутация: нет
Всего: 0

Странно эти API работаю. Теперь вообще окно не мигает,но обе функции работают прекрасно,если окно не сворачивать. Лодно. Это в принципе я и хотел
jonie, спасибо тебе огромное. Тему можно считать закрытой.

Репутация: 7
Всего: 118

Код

ShowWindow(form_handle,SW_SHOW);
SetWindowPos(form_handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

у меня и так вот не мигает .

Репутация: нет
Всего: 0

Код

ShowWindow(form_handle,SW_SHOW);
SetWindowPos(form_handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

У тебя так работает? Ты смотри.
А у меня если вызвать
ShowWindow(form_handle,SW_SHOW)
то окно наоборот сворачивается.

Слушай, а ты не знаеш? SW_SHOW, она в библиотека записывается как (1,2,3. ) или в шеснадцатиричном коде?
Просто у меня в библиотеке эти константы не объявлены, и прилось их вручную объявлять.
Может просто я их не так объявил.

Репутация: 8
Всего: 26

Вот так они объявлены в winuser.h

Так , что SW_SHOW у тебя было как SW_MINIMIZE

Репутация: нет
Всего: 0

Вот так они объявлены в winuser.h

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

Это получается одинаковые команды, зачем тогда их множить?

Читайте также: