Новое окно WPF отображается только под исходным окном - PullRequest
6 голосов
/ 09 сентября 2011

В моем приложении WPF у меня есть ListView в главной форме, который отображает связанные данные из DataSet. Когда пользователь дважды щелкает строку в ListView, он открывает подробное окно.

В моем XAML я использовал стиль для создания обработчика двойного щелчка в просмотре списка:

<Style x:Key="ListViewDoubleClick" TargetType="{x:Type ListViewItem}">
    <EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
...
<ListView Name="searchResults" ItemContainerStyle="{StaticResource ListViewDoubleClick}>

В выделенном фрагменте кода у меня есть словарь, который отслеживает открытые окна сведений (можно открывать несколько одновременно), так что если окно сведений уже открыто, оно выводится на передний план. Я работаю с двойным щелчком так:

private void HandleDoubleClick(object sender, MouseEventArgs e)
{
    DataRowView clickedRow = ((ListViewItem)sender).Content as DataRowView;
    int row = (int)clickedRow.Row["ID"];
    if (!displayedCards.ContainsKey(row))
    {
        DetailWindow window = new DetailWindow(RetrieveData(row));
        //window.Owner = this;
        displayedCards.Add(row, window);
        window.Show();
    }
    else
    {
        displayedCards[row].Activate();
    }
}

Моя проблема в том, что с кодом, подобным приведенному выше, подробные окна открываются за основной формой. Если я задаю информацию о владельце (window.Owner = this), подробные окна открываются поверх главной формы, но главная форма никогда не может появиться перед подробными окнами.

displayedCards[row].Activate() работает, как я и ожидал, перенося это окно подробностей вперед всех остальных окон подробностей, но оно становится жертвой той же проблемы, что и выше - оно не появляется перед главным окном.

То, чего я хочу добиться, - это иметь подробные окна на том же уровне / слое (порядок / z?), Что и главное окно, чтобы оба они могли отображаться друг над другом, и чтобы подробные окна отображались на вершина основной формы, когда они открыты.

Редактировать: Если это важно, в подробном окне нет WindowStyle, а AllowsTransparency имеет значение true. У меня также нет заголовка окна, и окно не появляется на панели задач. При попытке выяснить это, я попытался установить WindowStyle на SingleBorderWindow, и возникает та же проблема, за исключением того, что граница подробного окна отображается поверх главной формы при рисовании подробного окна, и затем он отталкивается от основной формы. Может ли мой обработчик двойного щелчка вытягивать основную форму вперед после отображения подробного окна?

1 Ответ

8 голосов
/ 09 сентября 2011

Похоже, вы не сообщаете системе маршрутизации событий, что вы обработали событие.Попробуйте установить e.Handled в значение true, чтобы WPF запретил дальнейшую обработку ваших событий.См. RoutedEventArgs.Handled Свойство и Пометка перенаправленных событий как обработанных и Обработка класса для получения дополнительной информации о том, как свойство Handled изменяет маршрутизацию событий.

...