2015-11-13 44 views
10

Wiem, jak otworzyć dodatkowe okna za pomocą TryShowAsStandaloneAsync. Jednakże, jeśli oryginalne okno jest zamknięte - nie powiodło się TryShowAsStandaloneAsync (dlaczego?). And I don't know how to "revive" it (- oryginalne okno).W jaki sposób uniwersalna aplikacja Windows ma wiele niezależnych okien (np. Aplikacja Microsoftu "Zdjęcia")?

Ale "Zdjęcia" wydają się działać dobrze, podobnie jak aplikacje na komputer. Jak to robi? (Chciałbym to naśladować.) Można otworzyć okno z obrazem, otworzyć kolejne, zamknąć pierwsze i nadal być w stanie otworzyć więcej okien.

Jakikolwiek sposób byłby w porządku - sposób uruchomienia okien bez wyświetlania głównego okna lub sposób przywrócenia głównego okna po jego zamknięciu (aby otworzyć nowe okno), lub w inny sposób.

Odpowiedz

3

Wystarczy popatrzeć na MultipleViews sample app. Ta aplikacja ma problem, który opisujesz.

Każdy utworzony widok będzie miał swój własny wątek interfejsu użytkownika, a tym samym dyspozytorski. Kluczem do tej aplikacji jest wywołanie TryShowAsStandaloneAsync z dyspozytora aktualnie aktywnego okna.

W zdarzeniu z próbki OnLaunched kod szuka odwołania do aktualnie otwartego widoku, używając identyfikatora widoku z argumentów uruchamiania. Następnie używa on wywołującego powiązanego z tym widokiem, aby wywołać kod UI, używając Dispatcher.RunAsync, w tym wątku UI tego widoku. Powinieneś użyć tego wątku otwartego okna, aby zadzwonić pod numer TryShowAsStandaloneAsync, aby uruchomić nowy widok główny. Następnie możesz zadzwonić pod numer Window.Activate przy użyciu dyspozytora nowego widoku głównego.

-3

Nie jestem pewien, czy używasz Dispatcher.RunAsync aby utworzyć widok, tj:

async private void Button_Click(object sender, RoutedEventArgs e) 
{ 
CoreApplicationView newView = CoreApplication.CreateNewView(); 
int newViewId = 0; 

await newView.Dispatcher.RunAsync(CoreDispatcherPriority.High,() => 
{ 
var frame = new Frame(); 
frame.Navigate(typeof(MainPage), newViewId); 
Window.Current.Content = frame; 

// In Windows 10 UWP we need to activate our view first. 
// Let's do it now so that we can use TryShow...() and SwitchAsync(). 
Window.Current.Activate(); 

newViewId = ApplicationView.GetForCurrentView().Id; 
}); 

bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId); 
} 

uzyskać więcej informacji, zapoznaj się z: https://daxsnippets.wordpress.com/2015/07/09/windows-10-create-views/

+0

Jak już powiedziałem, wiem, jak otworzyć dodatkowe okna. Problem występuje dopiero po zamknięciu głównego okna. – ispiro

1

Odpowiadając dlaczego TryShowAsStandaloneAsync nie po zamknięciu okna głównego:

myślę TryShowAsStandaloneAsync próbuje użyć główny widok jak widok kotwicy (to okno, aby umieścić nowe okno z tytułu).

Po zamknięciu głównego okna TryShowAsStandaloneAsync nie działa, ponieważ nie ma widoku zakotwiczenia.

Rozwiązaniem jest określić anchorViewId z myślą, że jest otwarty (jeden z nowych okien ty otwartych przed zamknięciem okna Główny), poprzez przeciążenie TryShowAsStandaloneAsync:

await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
    viewIdToShow, // Id of a new view, or of your hidden main view 
    ViewSizePreference.Default, 
    anchorViewId, // Id of one of your visible windows 
    ViewSizePreference.Default); 

Od this answer.