2013-06-26 2 views
1

Я использую MefBootstrapper Prism для инициализации моего приложения WPF, так как часть этого процесса инициализируется в окне оболочки.Окно входа в приложение WPF не сверху

После выполнения метода Run() MefBootstrapper, я показываю окно входа в систему, которое подключается к серверу, и в случае успешного соединения оболочка загружается (из основного потока пользовательского интерфейса).

Это окно входа в систему работает по новому выделенному потоку пользовательского интерфейса, чтобы не затормозить индикатор выполнения в этом процессе (подключение к серверу и особенно загрузка Shell).

К сожалению, окно входа в систему не отображается сверху и не фокусируется (даже если я использую: Активировать(), TopMost = true, Focus()).

  //UI mode - a new UI thread is initialized 
      var uiThread = new Thread(() => 
      { 
       var loginWindow = new LoginWindow(); 

       loginWindow.Show(); 
       loginWindow.Activate(); 
       loginWindow.Topmost = true; 
       loginWindow.Topmost = false; 
       loginWindow.Focus();   

       System.Windows.Threading.Dispatcher.Run(); 
      }); 
      uiThread.SetApartmentState(ApartmentState.STA); 
      uiThread.IsBackground = true; 
      uiThread.Start(); 

Как я могу решить эту проблему?

+0

Возможно, вы установили флаг TopMost после того, как окно уже было инициализировано. Покажите соответствующие части кода в своем вопросе. – NVM

+0

Если для отображения окна TopMost установлено значение true, окно не имеет фокуса. –

+0

Тогда ваш вопрос не будет: Как установить Фокус на самое верхнее окно? Вы просто путаете проблему. – NVM

ответ

0

Попробуйте uiThread.IsBackground = false;

Вы можете отправить новый экземпляр LoginWindow к теме?

 uiThread.Start(new LoginWindow()); 

, а затем использовать параметр в пользователя появляется делегат темы для Show.

Я предполагаю, что это приведет к визуализации окна в текущем контексте диспетчера и отобразит его на переднем плане.

+0

попробовал ... не меняет. –

+0

см. Мое следующее предположение. –

0

Я хотел бы создать пользователя появляется перед ShellWindow создается, только до конца ConfigureContainer().

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

Обратите внимание, что вы не закрываете окно, прежде чем вы покажете свой ShellWindow (т. Е. Скройте его при успешном входе в систему), иначе приложение закроется.

Смежные вопросы