ডাব্লুপিএফ: স্ক্রোলবারের সাথে আইটেমসন্ট্রোল (স্ক্রোলভিউয়ার)


128

আমি কীভাবে আইটেমসন্ট্রোলটিতে একটি স্ক্রোলবার যুক্ত করব সে সম্পর্কে এই ছোট "টিউটোরিয়াল" টি অনুসরণ করেছি এবং এটি ডিজাইনার ভিউতে কাজ করে, তবে যখন আমি প্রোগ্রামটি সংকলন করি এবং সম্পাদন করি না তখন (কেবল প্রথম কয়েকটি আইটেম দেখানো হয়, এবং আরও দেখতে কোনও স্ক্রোলবার - এমনকি না যখন উল্লম্বস্ক্রোলবারভিজিবিলিটি "অটো" এর পরিবর্তে "দৃশ্যমান" তে সেট করা থাকে)।

এটি সমাধান করার জন্য কোনও ধারণা?


আমি আমার আইটেমগুলি দেখানোর জন্য এই কোডটি ব্যবহার করি (সাধারণত আমি ডেটাবাইন্ডিংয়ের সাথে কাজ করি তবে আমার ডিজাইনারের আইটেমগুলি দেখার জন্য আমি সেগুলি ম্যানুয়ালি যুক্ত করেছি):

<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
আপনি এটি দেখলে এটি খুব স্পষ্ট হয় ... আমি যখন উইন্ডোজ ফর্ম থেকে আসছি, আমি প্রায়শই নিজেকে ভুল মানসিকতায় আটকা পড়ে দেখি। দেখে মনে হয় যে ডাব্লুপিএফ অনেকগুলি ভুলের অধিকার ... +1।
ক্রিস্টোফার লেট

3
ধন্যবাদ-সহায়ক সহায়ক। আমি লেট এর সাথে একমত যে আমার উইনফর্মস মস্তিষ্ক প্রাথমিকভাবে এটি "পায়" না।
itmatt

1
আমি এখানে এটি চেষ্টা করেছি এবং এখনও এটি কার্যকর হয়নি। আইটেমসন্ট্রোলটি তার মূল পাত্রে সরাসরি প্রবাহিত হয় এবং কোনও স্ক্রোলবার একেবারেই দৃশ্যমান হয় না।
রিস্তোগড

8
@ রিস্টোগড আপনি যদি স্ক্রোলভিউয়ারকে এমন কোনও কিছুর ভিতরে হোস্ট করেন যা এর সামগ্রীতে প্রয়োজন হিসাবে যতটা বাড়তে দেয়, উদাহরণস্বরূপ স্ট্যাকপ্যানেল, স্ক্রোলিং কাজ করবে না। মূল পাত্রে কি? স্ক্রোলভিউয়ার বা পিতামাতার যে কোনও একটিতে একটি নির্দিষ্ট উচ্চতা নির্ধারণ করার চেষ্টা করুন, এটি কি সহায়তা করে?
ওসকার

4
@ রড আপনি এটি অর্জন করতে স্ট্যাকপ্যানেলের পরিবর্তে ডকপ্যানেল বা গ্রিডে স্ক্রোলভিউয়ার হোস্ট করতে পারেন।
ওসকর

79

আইটেমপ্যানেলটেম্প্লেটের পরিবর্তে আপনাকে নিয়ন্ত্রণ টেম্পলেটটি সংশোধন করতে হবে:

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

হতে পারে, আপনার কোডটি কাজ করছে না কারণ স্ট্যাকপ্যানেলের নিজস্ব স্ক্রোলিং কার্যকারিতা রয়েছে। স্ট্যাকপ্যানেল.ক্যানভার্টিক্যালি স্ক্রোল সম্পত্তি ব্যবহার করার চেষ্টা করুন ।


1
স্ট্যাকপ্যানেল ক্যানভের্তিক্যালি স্ক্রোল সম্পত্তি কাজ করে না, আমি ভয় করি।
Xuntar

স্ট্যাকপ্যানেল CanVerticallyScrol কাজ করে না তবে এখানে দেওয়া কোড উদাহরণটি আমার পক্ষে কাজ করেছে। ধন্যবাদ
সৌভিক বসু

এইটা কাজ করে. আমি বাইরের পরিবর্তে ভিতরে স্ক্রোলভিউয়ার তৈরি করার সন্ধান করছি , কারণ github.com/punker76/gong-wpf- ডিগ্রোড্রপ এর জন্য এটি প্রয়োজন।
হ্যালো সাম

3

আপনার স্ক্রোলভিউয়ারকে একটি ডকপ্যানেলে রাখুন এবং ডকপ্যানেল ম্যাক্সহাইট সম্পত্তি সেট করুন

[...]
<DockPanel MaxHeight="700">
  <ScrollViewer VerticalScrollBarVisibility="Auto">
   <ItemsControl ItemSource ="{Binding ...}">
     [...]
   </ItemsControl>
  </ScrollViewer>
</DockPanel>
[...]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.