2012-10-17 18 views
7

में विजुअलस्टेट को कैसे बदलूं, मैंने अभिव्यक्ति मिश्रण में निम्नलिखित दो राज्यों को परिभाषित किया है। मैं this मार्गदर्शिका का पालन करने की कोशिश कर रहा हूं लेकिन मुझे लगता है कि मुझे राज्य को कैसे और कब बदलना है, इस बारे में जानकारी चाहिए जब मुझे लटकती है।मैं WP7

enter image description here

गाइड मैं एक व्यवहार संलग्न करने के लिए कर रहा हूँ के अनुसार मेरी UserControl करने के लिए (मैं "GotoState" मान) - दुर्भाग्य से मुझे नहीं लगता कि मैं वास्तव में एक User Control है - और यहां तक ​​कि अगर मैं, मैं करूंगा मेरे PortraitState और मेरे LandscapeState दोनों के लिए एक व्यवहार संलग्न करना है?

ऐसा लगता है कि मैं GotoState को अपने LayoutRoot तत्व में संलग्न कर सकता हूं। तो क्या मैं अपने व्यवहार को दोनों राज्यों में जोड़ता हूं? किसी भी तरह की सहायता का स्वागत किया जाएगा।

* संपादित करें: मैं अपने xaml.cs फ़ाइल में चारों ओर खेल रहा था और यह पाया कि यह प्रोग्रामेटिक तरीके से ऐसा करने का तरीका हो सकता है। जब डिबगिंग और अभिविन्यास बदलते हैं तो मैं अपना स्विच केस दर्ज करता हूं और सही अभिविन्यास ढूंढता हूं। राज्य, हालांकि, कभी नहीं बदला जाता है। मैं क्या गलत कर रहा हूं?

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
    { 
     switch (e.Orientation) 
     { 
      case PageOrientation.Landscape: 
       ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true); 
       break; 
      case PageOrientation.LandscapeRight: 
       ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true); 
       break; 
      case PageOrientation.LandscapeLeft: 
       ExtendedVisualStateManager.GoToElementState(root:LayoutRoot, stateName: "LandscapeState", useTransitions: true); 
       break; 
      case PageOrientation.Portrait: 
       ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true); 
       break; 
      case PageOrientation.PortraitUp: 
       ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true); 
       break; 
      case PageOrientation.PortraitDown: 
       ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true); 
       break; 
      default: 
       break; 
     } 
    } 

EDIT2: जब प्रयास कर यह ऊपर लगता है कि GotoElementState झूठी वापस आती है और, MSDN के अनुसार: "। TRUE देता नियंत्रण सफलतापूर्वक नए राज्य के रूप में स्थानांतरित, अन्यथा, झूठे"

अब मुझे प्रश्न के साथ छोड़ दिया गया है: मेरे राज्य संक्रमण में असफल होने का कारण क्या हो सकता है?

उत्तर

1

मैं निम्नलिखित कार्य करके अपने ही समस्या का समाधान खोजने में कामयाब रहे।

ऐसा लगता है कि का उपयोग कर ExtendedVisualStateManager.GotoElementState (UIElement, स्ट्रिंग, bool) बहुत अच्छी तरह से समय पर काम नहीं करता है तो मैं VisualStateManager.GotoState उपयोग करने के लिए एक तरह से पाने के लिए मजबूर किया गया।

मैं बस जैसे एक UserControl में मेरी LayoutRoot लपेटकर द्वारा मेरी समस्या हल:

<UserControl x:Name="userControl"> 
    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <VisualStateManager.VisualStateGroups> 
    ... 
</UserControl> 

स्विचिंग राज्यों अब बस VisualStateManager.GotoState बुला का सवाल के रूप में मैं शुरू में ऐसा करने का प्रयास किया था।

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
    { 
     base.OnOrientationChanged(e); 

     switch (e.Orientation) 
     { 
      case PageOrientation.Landscape: 
      case PageOrientation.LandscapeRight: 
      case PageOrientation.LandscapeLeft: 
       VisualStateManager.GoToState(control: userControl, 
                 stateName: "LandscapeState", 
                 useTransitions: true); 
       break; 
      case PageOrientation.Portrait: 
      case PageOrientation.PortraitUp: 
      case PageOrientation.PortraitDown: 
       VisualStateManager.GoToState(control: userControl, 
                 stateName: "PortraitState", 
                 useTransitions: true); 
       break; 
      default: 
       VisualStateManager.GoToState(control: userControl, 
            stateName: "PortraitState", 
            useTransitions: true); 
       break; 
     } 
    } 
1

परिवर्तन इस तरह WP7 में VisualState:

switch (e.Orientation) 
    { 
     case PageOrientation.Landscape: 

      VisualStateManager.GoToState(this, "LandscapeState", true); 

      break; 

     case PageOrientation.Portrait: 

      VisualStateManager.GoToElementState(this,"PortraitState", true); 

      break; 

     default: 

      break; 
    } 

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