1
我有一個MetroWindow。它有Flyout。 Flyout有一個按鈕。按Flyout按鈕時,會顯示一個新的MetroWindow,並且彈出窗口被取消。防止焦點切換到飛出的主窗體IsOpen = false;
什麼發生是:
- 用戶在按下彈出按鈕。
- 按鈕按鈕打開一個新的非模態窗體並將Flyout的IsOpen設置爲false。
- 非模態窗體打開所有內容。
- 彈出關閉。
- 彈出關閉後,主窗體獲得焦點 - 隱藏非模態窗體。
我希望焦點更改爲主窗體在彈出關閉時不會發生。
我有一個方法可行,但它有點遲緩,因爲它必須等待彈出動畫完成。
有沒有更好的方法?我不想讓新窗口成爲模式或AlwaysOnTop。
private void SearchResultClose(object sender, RoutedEventArgs e)
{
m_EvtResultClosed.Set();
}
private void SearchResultOpenChange(object sender, RoutedEventArgs e)
{
if (foSearchResult.IsOpen)
{
m_EvtResultClosed.Reset();
}
}
和
<controls:Flyout Position="Top" Header="" x:Name="foSearchResult"
Height="275" ClosingFinished="SearchResultClose" IsOpenChanged="SearchResultOpenChange">
和
private void OpenPersonCard(object sender, RoutedEventArgs e)
{
var selected_person = SearchPersonResultsVM.View.CurrentItem as Editable<Person>;
if (selected_person != null)
{
var card = new PersonFileWindow();
card.Person = selected_person;
foSearchResult.IsOpen = false;
// Wait for it to close, and then show the form.
Dispatcher.BeginInvoke(new Action(async() =>
{
await Task.Run(() =>
{
m_EvtResultClosed.WaitOne();
});
card.Show();
}), null);
}
}
其中
private AutoResetEvent m_EvtResultClosed = new AutoResetEvent(false);
太棒了!謝謝。 我已經刪除了所有我難看的信號量代碼。 –