2012-05-02 38 views
10

मैं एक ऐसे आवेदन पर काम कर रहा हूं जिसमें पंजीकरण फॉर्म शामिल है। इस फ़ॉर्म में एकाधिक टेक्स्ट एंट्री बॉक्स हैं, और इसलिए स्क्रॉलव्यूअर का उपयोग उन सभी को एक पृष्ठ पर प्रदर्शित करने की अनुमति देने के लिए किया जाता है।स्क्रॉलव्यूवर और एसआईपी अंक (WP7.5 आम)

निम्नलिखित XAML कोड का एक उदाहरण नीचे छीन लिया है मैं उपयोग कर रहा हूँ:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 
     <TextBlock x:Name="ApplicationTitle" Text="SCROLLVIEWER TEST" Style="{StaticResource PhoneTextNormalStyle}"/> 
     <TextBlock x:Name="PageTitle" Text="registration" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
    </StackPanel> 

    <ScrollViewer Grid.Row="1"> 
     <StackPanel> 
      <TextBlock Text="Hello" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello1" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello2" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello3" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello4" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello5" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello6" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello7" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="Hello8" Margin="12,0,0,0"/> 
      <TextBox /> 
      <TextBlock Text="END" Margin="12,0,0,0"/> 
      <TextBox /> 
     </StackPanel> 
    </ScrollViewer> 
</Grid> 

(ध्यान दें कि ScrollViewer जिसका अर्थ है कि शीर्षक पैनल परदे पर हर समय रहना चाहिए एक ग्रिड सेल के अंदर है,)

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

परीक्षण मामलों

  • किसी पाठ बॉक्स है कि स्क्रीन के शीर्ष के निकट दिखाई दे रहा है का चयन करें ScrollViewer अप में] सामग्री धक्का द्वारा सही ढंग से व्यवहार करती है, को खोलने के लिए कुंजीपटल।
  • कीबोर्ड के साथ पृष्ठ के निचले भाग तक स्क्रॉल करने का प्रयास करें।
  • पृष्ठ के निचले हिस्से में आइटम पहुंच योग्य नहीं हैं।

या

  • किसी पाठ बॉक्स है कि स्क्रीन के नीचे स्थित दिख रहा है का चयन करें।
  • पूरे पृष्ठ की सामग्री को धक्का दिया गया है।
  • कीबोर्ड के साथ पृष्ठ के शीर्ष पर स्क्रॉल करने का प्रयास करें।
  • पृष्ठ के शीर्ष पर आइटम पहुंच योग्य नहीं हैं, और कीबोर्ड पैनल बंद होने तक शीर्षक पैनल कभी भी वापस नहीं आता है।

इस मुद्दे को हल करने में कोई भी मदद की सराहना की जाएगी। धन्यवाद।

+0

निम्न ब्लॉग पोस्ट यह हल करने के लिए एक अच्छा प्रारंभिक बिंदु हो सकता है: http://sorokoletov.com/2011/08/windows-phone-70-handling-text-entry-screens/ –

+0

@PaulDiston धन्यवाद। मैंने पहले इस ब्लॉग को पढ़ा है। मैंने डेमो ऐप का प्रयास किया और यह वह नहीं है जिसे मैं ढूंढ रहा हूं। संक्रमण बहुत अचानक है (यानी शीर्षक पैनल केवल एसआईपी एनीमेशन खत्म होने पर फिर से प्रकट होता है), यह उल्लेख करने के लिए कि कार्यान्वयन इतना आसान नहीं है। मेरा इच्छित कार्यान्वयन संपर्क विवरणों से मेल खाता है जो आपको "लोग" ऐप में मिलते हैं जो संपर्क और पते के प्रबंधन के लिए विंडोज फोन 7 पर शामिल है। यह एक जटिल उदाहरण नहीं है, और कोई उम्मीद करेगा कि यह बॉक्स से बाहर काम करे और फॉर्म में आइटम को कवर न करे। –

+0

यह भी कोशिश करें यदि यह स्क्रॉलिंग समस्या के साथ मदद कर सकता है। http://www.luisleo.net/2012/06/24/how-to-use-listbox-properly-with-windows-phone-7/ –

उत्तर

0

समस्या यह है कि कुंजीपटल प्रकट होने के बाद स्क्रॉलवीवर ऊंचाई संशोधित नहीं होती है, इसलिए यह क्लिप हो जाती है। एक समाधान स्क्रोलवीवर की ऊंचाई को संशोधित करना होगा (कीबोर्ड की ऊंचाई के अनुसार) और फिर इसे दोबारा बदलें (इससे आपको कुछ सिरदर्द मिल सकते हैं)।

कुंजीपटल दिखाई देने पर एक और समस्या यह जानती है - आप अपने सभी टेक्स्टबॉक्स पर गॉटफोकस/लॉस्टफोकस ईवेंट के लिए पंजीकरण कर सकते हैं लेकिन यह एक अच्छा समाधान नहीं है। यह आपकी मदद कर सकता है: http://blogs.msdn.com/b/jaimer/archive/2010/11/05/guessing-if-the-sip-is-visible-in-a-windows-phone-application.aspx

आशा इस में मदद करता है एक छोटे से :)

+0

सराहनीय हैक की तरह लगता है। हालांकि, यह केवल तभी काम करता है जब आप स्क्रीन के शीर्ष पर एक बॉक्स का चयन करते हैं (जब स्क्रॉलव्यूअर के निचले हिस्से में सामग्री अस्पष्ट हो जाती है)। स्क्रीन पर टेक्स्ट बॉक्स भौतिक स्थिति इस बात को प्रभावित करती है कि पृष्ठ को कितना धक्का दिया जाता है। तो यदि यह शीर्ष पर है, तो सामग्री केवल मामूली रूप से धक्का दी जाती है। यदि यह नीचे है, तो सामग्री को बहुत दूर तक धक्का दिया जाता है। जहां तक ​​मुझे पता है, यह निर्धारित करना असंभव है कि पेज को कितना समायोजित किया गया है, जिसका अर्थ है कि इसके लिए आसानी से क्षतिपूर्ति करना मुश्किल है। इसके अलावा शीर्षक फलक को स्क्रीन से धक्का दिया जाएगा, जो आदर्श नहीं है। –

+0

यद्यपि आपके सुझाव के लिए धन्यवाद। :) –

0

मुझे लगता है कि यदि आप किसी अन्य कोण से समस्या पर आने से इस का समाधान कर सकते हैं। फोन पेज को स्क्रॉल करेगा ताकि एसआईपी (सॉफ़्टवेयर कीबोर्ड) कभी भी टेक्स्टबॉक्स को कवर न करे जिस पर फोकस हो।

हालांकि आप अपने स्क्रॉलव्यूअर में निहित शीर्ष तत्व पर स्पर्श ईवेंट का पता लगाकर एसआईपी को छिपाने के लिए मजबूर कर सकते हैं, उदा।:

<ScrollViewer Grid.Row="1"> 
    <StackPanel ManipulationDelta="OnScrollViewerGridManipulationDelta">` 

फिर, फोकस (0x0 पिक्सेल आकार में) एक छिपा बटन को दे इस बंद करने के लिए एसआईपी के लिए बाध्य करेगा द्वारा। तो यह संभव अपने उपयोगकर्ताओं ScrollViewer अपेक्षा के अनुरूप ऊपर और नीचे स्क्रॉल और करने के लिए करने के लिए किया गया था हो जाएगा ...

private void OnScrollViewerGridManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e) 
    { 
     // This will hide the SIP if it is currently showing. 
     // We can't do this directly, but we can force this by taking focus away from any of the TextBoxes that may have it. 
     this.hiddenButton.Focus(); 
    } 
+0

आप बस इसे कॉल कर सकते हैं। एसआईपी को छिपाने के लिए पृष्ठ पर ध्यान देने के लिए कोड में फोकस()। अतिरिक्त छुपे ऑब्जेक्ट बनाने की कोई ज़रूरत नहीं है। – Styff

0

मैं एक ऐप्स मैं विकसित किया है और जिस तरह से मैं इसे से निपटा के साथ एक ही मुद्दा मिला है इनपुट textbox एस युक्त पैनल की ऑटो ऊंचाई का पता लगाएं और उसके बाद ऊंचाई को मैन्युअल रूप से सेट करें और इसे अच्छी तरह से स्क्रॉल करने के लिए नीचे 400 - 500 पीएक्स जोड़ें। प्रभाव काफी चिकनी है और आपके यूआई को "हैकिश" IMHO नहीं दिखाएगा।

अपने मामले में आप LayoutRoot का स्वत: ऊंचाई पता लगाने के लिए होगा Grid और फिर पंक्ति 1 की RowDefinition मैन्युअल ऊंचाई सेट पर - एक अतिरिक्त 400px जोड़ने के लिए याद (या जो भी अपनी स्थिति में उचित लग रहा है)।

इनपुट की आसानी के लिए मैं तो प्रत्येक TextBox से प्रत्येक OnKeyDown घटना संभाला Enter मार पर अगले TextBox को फ़ोकस बदलने के लिए। अंतिम TextBox पर मैंने इस पर ध्यान केंद्रित किया। फोकस() जो पृष्ठ पर ध्यान केंद्रित करता है और एसआईपी को छुपाता है। https://siphelper.codeplex.com/

यह ScrollViewer और सामग्री की ऊंचाई को संशोधित करता सर्वोच्च/सब से नीचा बात करने के लिए स्क्रॉल किया जा सकता है -

0

मेरे छोटे पुस्तकालय में कृपया एक नज़र डालें।

यदि आपके पास कोई सुझाव है - तो मुझसे संपर्क करने में संकोच न करें।