WPF: आइटम्सकंट्रोल स्क्रॉलबार (स्क्रॉलव्यूअर) के साथ


128

मैंने इस छोटे से "ट्यूटोरियल" का पालन किया कि कैसे एक स्क्रॉलबार को एक आइटमकंट्रोल में जोड़ा जाए, और यह डिजाइनर दृश्य में काम करता है, लेकिन तब नहीं जब मैं प्रोग्राम को संकलित और निष्पादित करता हूं (केवल पहले कुछ आइटम दिखाते हैं, और अधिक देखने के लिए कोई स्क्रॉलबार नहीं - यहां तक ​​कि जब VerticalScrollbarVisibility को "Auto" के बजाय "Visible" पर सेट किया गया है)।

इसे हल करने के बारे में कोई विचार?


यह वह कोड है जिसका उपयोग मैं अपनी वस्तुओं को दिखाने के लिए करता हूं (आम तौर पर मैं डेटाबाइंडिंग के साथ काम करता हूं, लेकिन अपने डिजाइनर में उन वस्तुओं को देखने के लिए जिन्हें मैंने मैन्युअल रूप से जोड़ा है:

<ItemsControl x:Name="itemCtrl" Style="{DynamicResource UsersControlStyle}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top">
            </StackPanel>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
</ItemsControl>

और यह मेरा टेम्पलेट है:

<Style x:Key="UsersControlStyle" TargetType="{x:Type ItemsControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ItemsControl}">
                <Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                    <ScrollViewer VerticalScrollBarVisibility="Visible">
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

जवाबों:


261

एक के लिए एक स्क्रॉलबार प्राप्त करने के लिए ItemsControl, आप इसे ScrollViewerइस तरह से होस्ट कर सकते हैं :

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <ItemsControl>
    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
    <uc:UcSpeler />
  </ItemsControl>
</ScrollViewer>

16
यह बहुत स्पष्ट है जब आप इसे देखते हैं ... जैसा कि मैं विंडोज फॉर्म से आ रहा हूं, मैं अक्सर खुद को गलत मानसिकता में फंसता हुआ पाता हूं। ऐसा लगता है कि WPF बहुत सारे गलत अधिकारों का अधिकार करता है ... +1।
क्रिस्टोफर लेटटे

3
साभार -सहायक मैं लेट से सहमत हूं कि मेरा WinForms दिमाग शुरू में "नहीं" मिलता है।
इसका

1
मैंने बस यहीं कोशिश की और यह अभी भी काम नहीं किया। आइटम्सकंट्रोल अपने मूल कंटेनर से ठीक दूर बहता है और कोई भी स्क्रॉलबार दिखाई नहीं देता है।
रिस्तोगोड

8
@Ristogod यदि आप स्क्रॉलव्यूअर को किसी ऐसी चीज़ के अंदर होस्ट करते हैं जो इसकी सामग्री को आवश्यकतानुसार बढ़ने देती है, उदाहरण के लिए एक StackPanel, तो स्क्रॉलिंग काम नहीं करेगी। मूल कंटेनर क्या है? स्क्रॉलव्यूअर या माता-पिता दोनों में से एक पर एक निश्चित ऊंचाई सेट करने की कोशिश करें, क्या यह मदद करता है?
ऑस्कर

4
@Rod आप इसे प्राप्त करने के लिए एक StackPanel के बजाय एक DockPanel या एक ग्रिड में स्क्रॉल दृश्य होस्ट कर सकते हैं।
ऑस्कर

79

आपको आइटम टेम्पलेट के बजाय नियंत्रण टेम्पलेट को संशोधित करना होगा:

<ItemsControl >
    <ItemsControl.Template>
        <ControlTemplate>
            <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}">
                <ItemsPresenter />
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
</ItemsControl>

हो सकता है, आपका कोड काम नहीं कर रहा हो क्योंकि StackPanel की अपनी स्क्रॉलिंग कार्यक्षमता है। StackPanel.CanVerticallyScroll संपत्ति का उपयोग करने का प्रयास करें ।


1
StackPanel CanVerticallyScroll संपत्ति ने काम नहीं किया, मुझे डर है।
Xuntar

StackPanel CanVerticallyScroll ने काम नहीं किया, लेकिन यहां दिए गए कोड उदाहरण ने मेरे लिए काम किया। धन्यवाद
सौविक बसु

यह काम। मैं बाहर के बजाय अंदर स्क्रॉल करने वाला बनाने के लिए देख रहा हूँ, क्योंकि github.com/punker76/gong-wpf-dragdrop को इसकी आवश्यकता होती है।
हैलोसम

3

DockPanel में अपने ScrollViewer रखें और DockPanel MaxHeight प्रॉपर्टी सेट करें

[...]
<DockPanel MaxHeight="700">
  <ScrollViewer VerticalScrollBarVisibility="Auto">
   <ItemsControl ItemSource ="{Binding ...}">
     [...]
   </ItemsControl>
  </ScrollViewer>
</DockPanel>
[...]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.