2012-04-28 12 views
11

क्या मेट्रो ऐप में स्नैप में सी # का जवाब देने का कोई तरीका है? जब पृष्ठों में से एक को छीन लिया जाता है तो मुझे एक और दिखाना होगा। मेरा विचार है कि दूसरे पृष्ठ पर नेविएट करके स्नैप का जवाब देना।विंडोज 8 में स्नैप के प्रोग्रामेटिक रूप से प्रतिक्रिया कैसे दें मेट्रो

मैं

var currentView = ApplicationLayout.GetForCurrentView(); 
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged); 

पाया लेकिन ऐसा लगता है यह अब उपभोक्ता पूर्वावलोकन में काम करता है लग रहा है। क्या कोई और तरीका है?

+2

यह स्नैप नमूना में अच्छी तरह से कवर किया गया है: http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 –

+0

स्वीकृत उत्तर रिलीज पूर्वावलोकन के रूप में पुराना है। –

उत्तर

5

उपभोक्ता पूर्वावलोकन में आपको किसी भिन्न घटना पर प्रतिक्रिया करने की आवश्यकता है। यह ViewState अब चेंज किया गया है, लेआउट चेंज नहीं।

+6

यह उत्तर पुराना है। निष्पक्ष होने के लिए रिलीज पूर्वावलोकन – Jowen

+1

के लिए नीचे दी गई मेरी पोस्ट देखें, यह उपभोक्ता पूर्वावलोकन के लिए गलत नहीं है जो उत्तर के पहले तीन शब्द हैं। यह वर्तमान संस्करण के लिए सही नहीं है, लेकिन यह गलत होने जैसा नहीं है। –

+1

निष्पक्ष होने के लिए, कोई भी नहीं कहा कि यह गलत है ... बस पुराना :) – Jowen

24

रिलीज पूर्वावलोकन में आपको फिर से एक अलग घटना पर प्रतिक्रिया करने की आवश्यकता है :) इसका आकार अब देखा गया है, ViewStateChanged नहीं।

इससे पहले, अपने एप्लिकेशन दृश्य राज्य परिवर्तनों को संभाल कुछ इस तरह करना होगा:

using Windows.UI.ViewManagement; 

// Register for the viewstatechanged event 
ApplicationView.GetForCurrentView().ViewStateChanged += ViewStateChanged;  

private void ViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs e) 
{ 
    // Obtain view state from event payload 
    ApplicationViewState myViewState = e.ViewState; 
} 

अब इस करना चाहिए एप्लिकेशन:

using Windows.UI.ViewManagement; 

// Register for the window resize event 
Window.Current.SizeChanged += WindowSizeChanged;  

private void WindowSizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 
{ 
    // Obtain view state by explicitly querying for it 
    ApplicationViewState myViewState = ApplicationView.Value; 
} 

More info here

+0

इसके लिए धन्यवाद! – esskar

9

Jowen जवाब था, मैं मैं बस WindowSizeChanged कोड में कुछ और जोड़ रहा हूं:

ApplicationViewState viewState = ApplicationView.Value; 
    if (viewState == ApplicationViewState.Filled) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Filled"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenLandscape) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenLandscape"); 
    } 
    else if (viewState == ApplicationViewState.Snapped) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Snapped"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenPortrait) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenPortrait"); 
    } 
    else 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is something unexpected"); 
    } 

मुझे थोड़ा आश्चर्यजनक लगता है कि जब मैंने इस प्लेसहोल्डर कोड को किसी अन्य पृष्ठ पर कॉपी किया, तो यह कोड को एक बाध्य आयत देता है, क्योंकि मेरे पास "Windows.UI.ViewManagement का उपयोग नहीं किया गया था"; फिर भी, जब मैंने अपरिचित कोड पर आच्छादित किया, तो उसने पूछा "चिपका हुआ कोड के लिए फ़ाइल आयात करें?" मुझे लगता है (मुझे नहीं पता कि "यह" वीएस या रिशेर्पर है या नहीं) कोड का ट्रैक रख रहा है जो चिपका हुआ है, क्योंकि इसे एक राक्षसी कोण या अकिम्बो भौं के साथ देखा जा सकता है।

+3

'स्विच' कथन के लिए एक अच्छा उपयोग की तरह लगता है। –

+0

सच है, यह बेहतर होगा। –

+1

'विंडोज 8.1 के बाद रिलीज के लिए एप्लिकेशन व्यूस्टेट को बदला या अनुपलब्ध किया जा सकता है। इसके बजाए, विंडो लेआउट आकारों के लिए सीधे पूछें। ' फिर से बाहर निकाला गया। – Jawahar