10

मुझे पता है कि TryShowAsStandaloneAsync का उपयोग कर अतिरिक्त विंडो कैसे खोलें। हालांकि, अगर मूल विंडो बंद है - TryShowAsStandaloneAsync विफल रहता है (क्यों?)। And I don't know how to "revive" it (-मूल विंडो)।एक सार्वभौमिक विंडोज ऐप में कई स्वतंत्र विंडोज़ कैसे हो सकते हैं (माइक्रोसॉफ्ट के ऐप "फोटो" की तरह)?

लेकिन "फोटो" डेस्कटॉप एप्लिकेशन की तरह ठीक काम करता प्रतीत होता है। इससे ऐसा कैसे होता है? (मैं इसे अनुकरण करना चाहता हूं।) कोई एक छवि के साथ एक खिड़की खोल सकता है, दूसरा खोल सकता है, पहले बंद कर सकता है, और फिर भी अधिक खिड़कियां खोलने में सक्षम हो सकता है।

कोई भी तरीका ठीक होगा - मुख्य खिड़की के बिना खिड़कियां लॉन्च करने का कोई तरीका, या बंद होने के बाद मुख्य विंडो को पुनर्जीवित करने का कोई तरीका (इसे खोलने के लिए नई विंडो होने के लिए), या कुछ और तरीका

उत्तर

3

MultipleViews sample app पर एक नज़र डालें। इस ऐप में आपके द्वारा वर्णित समस्या है।

आपके द्वारा बनाए गए प्रत्येक दृश्य में अपना यूआई थ्रेड होगा, और इसलिए प्रेषक होगा। इस ऐप की कुंजी यह है कि TryShowAsStandaloneAsync वर्तमान में सक्रिय विंडो के प्रेषक से कहा जाता है।

नमूना के OnLaunched ईवेंट में, कोड लॉन्च तर्कों से व्यू आईडी का उपयोग करके वर्तमान में खुले दृश्य के संदर्भ की तलाश करता है। इसके बाद उस दृश्य के यूआई थ्रेड पर Dispatcher.RunAsync का उपयोग करके यूआई कोड को कॉल करने के लिए उस दृश्य से जुड़े प्रेषक का उपयोग किया जाता है। अपना नया मुख्य दृश्य लॉन्च करने के लिए आपको TryShowAsStandaloneAsync पर कॉल करने के लिए खुली विंडो के उस थ्रेड का उपयोग करना चाहिए। फिर आप नए मुख्य दृश्य के प्रेषक का उपयोग करके Window.Activate पर कॉल कर सकते हैं।

-3

मैं अगर आप दृश्य बनाने के लिए Dispatcher.RunAsync उपयोग कर रहे हैं, यानी यकीन नहीं है:

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); 
} 

अधिक जानकारी के लिए, कृपया उल्लेख करने के लिए: https://daxsnippets.wordpress.com/2015/07/09/windows-10-create-views/

+0

जैसा कि मैंने कहा है, मुझे पता है कि अतिरिक्त विंडो कैसे खोलें। समस्या मुख्य विंडो बंद होने के बाद ही होती है। – ispiro

1

का जवाब क्यों TryShowAsStandaloneAsync विफल रहता है एक बार आप मुख्य विंडो बंद कर दिया है:

मुझे लगता है कि TryShowAsStandaloneAsync की कोशिश करता लंगर दृश्य के रूप में मुख्य दृश्य का उपयोग करने के (यानी, एक खिड़की नई विंडो रिश्तेदार को जगह)।

एक बार जब आप मुख्य विंडो TryShowAsStandaloneAsync बंद कर देते हैं तो विफल रहता है क्योंकि इसमें कोई एंकर दृश्य नहीं है।

वैकल्पिक हल TryShowAsStandaloneAsync की एक अधिभार के माध्यम से, एक विचार है कि खुला है (नई विंडो आप मुख्य विंडो बंद करने से पहले खोला में से एक) के एक anchorViewId निर्दिष्ट करने के लिए है:

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); 

this answer से।

संबंधित मुद्दे