2012-06-20 13 views
9

मैं कभी कभी कुछ करीब 3,000 पिक्सेल चौड़ाई को यहआयताकार के अंत तक पहुंचने पर स्क्रॉलिंग रोकने के लिए अंदर एक आयत के साथ स्क्रॉलव्यूयर कैसे प्राप्त किया जा सकता है?

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Center" Width="728" Canvas.Top="20" d:LayoutOverrides="HorizontalMargin" > 
    <Rectangle x:Name="musicBG" Fill="#FF0692FD"/> 
</ScrollViewer> 

की तरह एक ScrollViewer के अंदर एक आयत बनाया है अनुप्रयोग, MusicBg परिवर्तन के आकार के उपयोग के दौरान,।

musicBG.Width = _songLength*PixelsPerSecond 

हालांकि, ScrollViewer स्क्रॉल करते समय, यह मेरे स्क्रीन बंद सभी तरह आयत स्क्रॉल करने के लिए अनुमति देता है।

उदाहरण के लिए कोड की यह पंक्ति मुझे निम्न मान देता है जब मैंने आयत को स्थानांतरित किया है जहां तक ​​मैं इसे स्थानांतरित करना चाहता हूं।

if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth) 

HorizontalOffset ~ 1200 के एक मूल्य है और ScrollableWidth के बारे में ~ 2900 एक मूल्य है।

मैं इसे ठीक से कैसे किया जा सकता है ताकि आयताकार स्क्रीन से पूरी तरह से स्क्रॉल नहीं किया जा सके?

मैं लगभग 1200 के क्षैतिज ऑफसेट की अपेक्षा करता हूं कि आयत को इसके गंतव्य के माध्यम से केवल आधा रास्ते धक्का दे, और इसे स्क्रीन से बाहर जाने शुरू न करें।

उत्तर:

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

संपादित करें: स्क्रीन शॉट:

बुरा कोड: bad scroll

अच्छा काम कर कोड:

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left" > 
       <Canvas x:Name="musicBG" Background ="#FF0692FD" Height="270" > 
        <Border Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" /> 
       </Canvas> 
      </ScrollViewer> 

अच्छा

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left" > 
            <Border x:Name="musicBG" Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" /> 

      </ScrollViewer> 

बुरा कोड के साथ बुरा पुस्तक की छवि स्क्रॉल: ध्यान दें कि यह 170 से कहता है खराब स्क्रॉल में 118 सेकंड की छोटी संख्या के बजाय नीचे दाईं ओर conds। good scroll

+0

यदि आप इसे देखने में मदद करने के लिए जो वर्णन कर रहे हैं उसके बारे में एक स्क्रीन शॉट फेंकना चाहते हैं तो मैं निश्चित कर सकता हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं, फिर भी, आप किसी भी ऑब्जेक्ट का उपयोग करने में सक्षम होना चाहिए पहले से ही कोशिश कर रहा है लेकिन आपको स्क्रॉल व्यूअर के व्यूपोर्ट में आकार जोड़ना पड़ सकता है और उसे ऑफसेट की भी आवश्यकता नहीं हो सकती है। वर्तमान में हालांकि आपके विवरण से कल्पना करना मुश्किल है लेकिन मुझे यकीन है कि हम इसे हल कर सकते हैं। –

+0

@ChrisW। प्रश्न अपडेट किया गया। – Bob

+1

यह बहुत अजीब बात है, यह तब तक पूरी तरह से काम करता है जब तक कि आयत 2000 के बाद बड़ा न हो जाए और फिर जब आप अंत तक स्क्रॉल करते हैं तो स्क्रीन को आगे और आगे बढ़ाना शुरू हो जाता है। आपने मेरी जिज्ञासा पकड़ी है .... – methodMan

उत्तर

1

मुझे आपका अधिकार है, wp7 2048 पिक्सेल के बाद बड़े आकार को प्रस्तुत नहीं करेगा। इसलिए पृष्ठ की स्क्रॉलिंग का कारण यह है क्योंकि यह इसका इलाज कर रहा है जैसे कि यह 2048 के बाद बड़ा था, लेकिन आप केवल 2048 पीएक्स की चौड़ाई तक देख सकते हैं और यह आयताकार के "भूत" भाग पर बस स्क्रॉल कर रहा है।

मुझे यकीन नहीं है कि क्या आप इसे ओवरराइड कर सकते हैं लेकिन सबसे अच्छा समाधान जो मैं (ओवरराइडिंग के बिना) के साथ आ सकता हूं, अपने आयत को 2000 में छोटा कर सकता है (केवल सुरक्षित होने के लिए) और फिर उन्हें प्रदर्शित करना स्क्रॉल व्यूअर के अंदर एक क्षैतिज ढेर पैनल में निर्बाध रूप से। इसके साथ समस्या यह है कि इस पर निर्भर करते हुए कि आपने इसे कैसे कोड किया है, इस समाधान को लागू करना मुश्किल हो सकता है; लेकिन आप इसे प्रदर्शित करते समय इसे अपने व्यूमोडेल में विभाजित करने में सक्षम हो सकते हैं और आपका तर्क केवल इसे एक बड़े हिस्से के रूप में देखेगा।