วิธีเพิ่ม ScrollBar ไปยัง Stackpanel


106

ในแอปพลิเคชัน WPF ของฉันฉันมี Stackpanel ที่มีตัวควบคุมหลายตัวอยู่ภายใน ฉันจะเพิ่มแถบเลื่อนลงในสแต็กพาแนลนี้ได้อย่างไร

คำตอบ:


163

ใส่ลงในไฟล์ScrollViewer.


ขอบคุณ. หลังจากวาง ScrollViewer ไว้รอบ ๆ เนื้อหาทั้งหมดจะไม่ปรากฏขึ้น ฉันลองตั้งค่าความสูงและความกว้างเป็นอัตโนมัติ แต่โชคไม่ดี ทำไมต้องแสดงเฉพาะส่วนที่ จำกัด ?
Shamim Hafiz

5
ฉันไม่มีเงื่อนงำ คำถามของคุณมีความยาวสองประโยคซึ่งเป็นรายละเอียดเล็กน้อยเพื่อคาดการณ์ปัญหาที่อาจเกิดขึ้น
Joey

เข้าใจแล้วฉันวางแท็กเปิดผิดที่ ขอบคุณมากสำหรับความช่วยเหลือ.
Shamim Hafiz

คำตอบที่ง่ายและสมบูรณ์แบบ
David Piao

94

Stackpanel ไม่มีกลไกการเลื่อนในตัว แต่คุณสามารถรวม StackPanel ใน ScrollViewer ได้ตลอดเวลา

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

3
ดีStackPanelไม่ดำเนินการIScrollInfoและข้อเสนอจำนวนของวิธีการที่เกี่ยวข้องกับการเลื่อน คุณแน่ใจหรือไม่ว่าไม่มีกลไกการเลื่อน "ในตัว" ใด ๆ
หรือผู้ทำแผนที่

4
จากmsdn.microsoft.com/en-us/library/… ... "คุณสมบัตินี้ไม่ได้มีไว้สำหรับใช้ในรหัสของคุณโดยเปิดเผยต่อสาธารณะเพื่อปฏิบัติตามสัญญาอินเทอร์เฟซ (IScrollInfo) การตั้งค่าคุณสมบัตินี้จะไม่มีผลถ้า คุณต้องการการเลื่อนทางกายภาพแทนการเลื่อนแบบตรรกะห่อ StackPanel ใน ScrollViewer และตั้งค่าคุณสมบัติ CanContentScroll เป็นเท็จ "
Skinner

11

การทำงานเช่นนี้:

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" Width="340" HorizontalAlignment="Left" Margin="12,0,0,0">
        <StackPanel Name="stackPanel1" Width="311">

        </StackPanel>
</ScrollViewer>

TextBox tb = new TextBox();
tb.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
stackPanel1.Children.Add(tb);

0

สำหรับ StackPanel ที่เน้นแนวนอนการใส่ทั้งการมองเห็นแถบเลื่อนอย่างชัดเจนทำให้ฉันได้รับแถบเลื่อนแนวนอน

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>

1
ทำซ้ำคำตอบก่อนหน้า
vapcguy

-4

หากคุณหมายถึงคุณต้องการเลื่อนดูรายการต่างๆในแผงสแต็กพาเนลของคุณลองวางเส้นตารางไว้รอบ ๆ ตามความหมายแผงสแต็กมีความยาวไม่สิ้นสุด

ลองทำสิ่งนี้:

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Width="311">
              <TextBlock Text="{Binding A}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStretch="Condensed" FontSize="28" />
              <TextBlock Text="{Binding B}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>

คุณสามารถทำให้มันใช้งานได้กับ ScrollViewer


4
รหัสนี้ถูกนำออกจากบริบท คุณสามารถลบการอ้างอิงเพื่อให้โค้ดใช้งานได้โดยไม่ต้องแก้ไขเพิ่มเติมหรือไม่?
Markus Jarderot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.