2009-01-23 13 views
66

नीचे दिए गए उदाहरण में मेरे पास दर्जनों फ़ॉन्ट नामों के साथ एक सूची बॉक्स है।मैं अपने लिस्टबॉक्स में वर्टिकल स्क्रॉलबार कैसे प्राप्त कर सकता हूं?

मैंने सोचा होगा कि यह स्वचालित रूप से उस पर एक लंबवत स्क्रॉलबार होगा ताकि आप किसी भी फ़ॉन्ट का चयन कर सकें, न केवल सूची में पहले वाले, बल्कि यह नहीं।

इसलिए मैंने एक "स्क्रॉल व्यूअर" जोड़ा और यह दाईं ओर एक "स्क्रॉलबार क्षेत्र" रखता है लेकिन स्क्रॉलबार क्षेत्र में कोई स्क्रॉलबार नहीं है ताकि आप स्क्रॉल (!) स्क्रॉल कर सकें।

स्क्रॉलबार स्वचालित क्यों नहीं है और मैं इसे स्क्रॉलबार के लिए कैसे मजबूर कर सकता हूं?

<StackPanel Name="stack1"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="2*"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <ScrollViewer> 
      <ListBox Grid.Row="0" Name="lstFonts" Margin="3" ItemsSource="{x:Static Fonts.SystemFontFamilies}"/> 
     </ScrollViewer> 
    </Grid> 
</StackPanel> 

उत्तर

116

आपके समाधान के साथ समस्या यह है कि आप एक सूची बॉक्स के चारों ओर एक स्क्रॉलबार डाल रहे हैं जहां आप शायद इसे सूची बॉक्स में रखना चाहते हैं।

यदि आप अपने लिस्टबॉक्स में स्क्रॉलबार को मजबूर करना चाहते हैं, तो ScrollBar.VerticalScrollBarVisibility संलग्न संपत्ति का उपयोग करें।

<ListBox 
    ItemsSource="{Binding}" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"> 
</ListBox> 

ऑटो को यह मान सेट करना स्क्रॉलबार को आवश्यक आधार पर पॉपअप करेगा।

+1

मेरे मामले में मैं एक 'भी ScrollViewer' और' ListBoxItems' अंदर 'ListBox' रखा था के रूप में व्यापक खींच रहे थे क्योंकि वे 'Listbox' के आकार के बाहर चाहते थे। 'स्क्रॉलव्यूअर' को हटाकर और 'स्क्रॉलव्यूअर' वर्टिकलस्क्रोलबार दृश्यता = "दृश्यमान" 'और 'स्क्रॉलव्यूयर। होरिज़ोंटलस्क्रोलबायर दृश्यता =" अक्षम "की चाल चल रही है। आपकी मदद के लिए धन्यवाद! – mandarin

16

मैंने अपने लिस्टबॉक्स में "ऊंचाई" जोड़ा और इसमें स्क्रॉलबार अच्छी तरह से जोड़ा गया।

+6

ऊंचाई और चौड़ाई गुणों का उपयोग करने से बचने की कोशिश करें क्योंकि वे सड़क को मुश्किल से बदल सकते हैं। आप जेरेडपार के समाधान के साथ जाने से बेहतर हैं। –

+0

मैं ऐसा करता हूं लेकिन यह सिर्फ एक स्क्रॉलबार के साथ दाईं ओर "स्क्रॉलबार क्षेत्र" रखता है, और मेरी सूची मेरी खिड़की के नीचे से अनंत काल तक नीचे जाती है, मैं सूची बॉक्स को कैसे बता सकता हूं (नीचे के तल पर रुकें खिड़की)? –

+15

क्योंकि यह एक स्टैकपैनल में है, इसलिए इसे पूरी तरह से आवश्यक सभी जगह दी जा रही है, इसलिए ऐसा नहीं लगता कि इसे * स्क्रॉलबार की आवश्यकता है। – Donnelle

3

स्क्रॉल बार स्वचालित रूप से सूची बॉक्स में जोड़ा जाता है जब तक कि इसकी दृश्यता छिपी हुई न हो। जब भी सूची आइटम का आकार एक से अधिक हो जाता है, जिसे एक सूची बॉक्स के अंदर दिखाया जा सकता है लंबवत या क्षैतिज सूची बॉक्स रन टाइम के दौरान देखा जा सकता है।

23

ListBox में पहले से ही ScrollViewer है। डिफ़ॉल्ट रूप से ScrollBar स्थान से अधिक सामग्री होने पर दिखाई देगा। लेकिन कुछ कंटेनर अपनी सामग्री को समायोजित करने के लिए स्वयं का आकार बदलते हैं (उदा। StackPanel), इसलिए "अंतरिक्ष से अधिक सामग्री" कभी नहीं है। ऐसे मामलों में, ListBox को सामग्री के लिए जितनी आवश्यक हो उतनी जगह दी जाती है।

अंतरिक्ष से अधिक सामग्री रखने की स्थिति की गणना करने के लिए, आकार ज्ञात होना चाहिए। सुनिश्चित करें कि आपके ListBox में एक बाध्य आकार है, या तो आकार को स्पष्ट रूप से ListBox तत्व पर या मेजबान पैनल से सेट करके।

यदि होस्ट पैनल लंबवत StackPanel है और आप VerticalScrollBar चाहते हैं तो आपको ऊंचाई को ListBox पर सेट करना होगा। अन्य प्रकार के कंटेनर के लिए, उदा। Grid, ListBox कंटेनर द्वारा बाधित किया जा सकता है। उदाहरण के लिए, आप इस तरह देखने के लिए अपने मूल कोड बदल सकते हैं:

<Grid Name="grid1"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="2*"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <ListBox Grid.Row="0" Name="lstFonts" Margin="3" 
       ItemsSource="{x:Static Fonts.SystemFontFamilies}"/> 
    </Grid> 
</Grid> 

ध्यान दें कि यह सिर्फ तत्काल कंटेनर महत्वपूर्ण है कि नहीं है। अपने उदाहरण में, तत्काल कंटेनर एक Grid है, लेकिन क्योंकि कि Grid एक StackPanel के अंतर्गत होता है, बाहरी StackPanel इसके तत्काल बच्चे Grid, को समायोजित करने के लिए विस्तारित किया जाता है ताकि बच्चे को समायोजित करने के लिए अपने बच्चे (ListBox) का विस्तार कर सकते हैं।

आप, ListBox की ऊंचाई की स्थापना भीतरी Grid की ऊंचाई निर्धारित करके द्वारा किसी भी बिंदु — में ऊंचाई विवश हैं, या बस बाहरी कंटेनर एक Grid — तो एक ऊर्ध्वाधर स्क्रॉल पट्टी स्वचालित रूप से किसी भी समय दिखाई देगा बनाकर नियंत्रण में फिट करने के लिए बहुत सारी सूची आइटम हैं।

+0

अभिभावक कंटेनर के रूप में डॉकपैनेल का उपयोग करना यह जानने की आवश्यकता को छोड़ देता है कि आप बच्चे के रूप में कितने तत्वों को जोड़ने या किसी भी ऊंचाई विशेषता को पूर्वनिर्धारित करने की योजना बनाते हैं। प्रत्येक बच्चे के लिए DockPanel परिभाषित करें। डॉक = शीर्ष। यह आपके "स्क्रॉलव्यूवर-चाइल्ड्स" को अपने स्क्रॉलबार को आवश्यकतानुसार दिखाता है। आमतौर पर परीक्षण नहीं किया गया, यह मेरे उपयोगकेस में काम किया। बीआर, डैनियल – dba

1

मेरे मामले में ListBox में आइटमों की संख्या गतिशील है इसलिए मैं ऊंचाई संपत्ति का उपयोग नहीं करना चाहता था। मैंने इसके बजाय मैक्सहेइट का उपयोग किया और यह अच्छी तरह से काम करता है। स्क्रॉलबार तब प्रकट होता है जब यह उस स्थान को भरता है जिसे मैंने आवंटित किया है।

0

मुझे एक ही समस्या हो रही थी, मेरे पास एक कॉम्बोबॉक्स था जिसके बाद स्टैकपैनल में लिस्टबॉक्स था और लिस्टबॉक्स के लिए स्क्रॉल बार दिखाई नहीं दे रहा था। मैंने इसे दो को डॉकपैनल में डालकर हल किया। मैंने कॉम्बोबॉक्स डॉकपैनल सेट किया है। डॉक = "टॉप" और सूची बॉक्स को शेष स्थान भरने दें।

0

XAML ListBox स्क्रॉलर - विंडोज 10 (UWP)

<Style TargetType="ListBox"> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/> 
</Style>