W mojej aplikacji WPF, mam ListView na formularzu głównym, który wyświetla powiązane dane z DataSet. Kiedy użytkownik dwukrotnie kliknie wiersz w ListView, otwiera okno szczegółów.Nowe okno WPF wyświetlane jest pod oryginalnym oknem.
W moim XAML, użyłem styl stworzyć kliknij dwukrotnie obsługi na ListView:
<Style x:Key="ListViewDoubleClick" TargetType="{x:Type ListViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
...
<ListView Name="searchResults" ItemContainerStyle="{StaticResource ListViewDoubleClick}>
w kodzie opóźnieniem, mam słownika, który śledzi Otwórz szczegóły okien (wielokrotny może bądź otwarty na raz), tak, że jeśli okno z detalami jest już otwarte, zostanie ono przeniesione na wierzch. I obsłużyć dwukrotnie kliknij tak:
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();
}
}
Moim problemem jest to, że z oznaczeniem jak to jest powyżej, okna są otwarte detal za głównego formularza. Jeśli ustawię informacje o właścicielu (window.Owner = this
), okna szczegółów zostaną otwarte w górnej części głównego formularza, ale główna forma nigdy nie będzie dostępna przed oknami szczegółów.
Urządzenie displayedCards[row].Activate()
działa zgodnie z oczekiwaniami, przenosząc to okno szczegółów do przodu wszystkich innych okien szczegółów, ale pada ofiarą tego samego problemu, co powyżej - nie pojawia się przed głównym oknem.
Co chcę osiągnąć to, że okna szczegółów na tym samym poziomie/warstwie (/ z porządku?) Są oknem głównym, tak aby obie mogły pojawiać się jedna nad drugą, i aby pojawiały się okna szczegółów na górze głównego formularza po otwarciu.
Edit: Jeśli to ważne, okno szczegół ma WindowStyle
i AllowsTransparency
jest ustawiona na wartość true. Nie mam również tytułu okna, a okno nie pojawia się na pasku zadań. Próbując to ustalić, próbowałem ustawić WindowStyle
na SingleBorderWindow
i wystąpił ten sam problem, z wyjątkiem tego, że krawędź okna szczegółów jest wyświetlana na górze głównej formy podczas rysowania okna szczegółów, a następnie jest przesuwana za główna forma. Czy mój dwuklikowy moduł obsługi mógł zasadniczo ciągnąć główny formularz do przodu po wyświetleniu okna szczegółów?
Tak właśnie się stało - dodanie funkcji "e.Handled = true;" na początku mojego programu obsługi podwójnego kliknięcia sprawia, że wszystkie okna działają zgodnie z oczekiwaniami. Dzięki! –
uratowałeś mnie! miesiące, gdy moi klienci skarżyli się, że podwójne kliknięcia otwierają się i chowają okna. dziękuję sto razy! –