XAML GridView ใน GridView ที่มีการวางแนวต่างกัน

(แก้ไขชื่อเรื่อง)

จะทำอย่างไรกับ XAML? ความกว้างแนวนอนได้รับการแก้ไขแล้วและต้องเลื่อนได้

อาจเป็น GridView หรือตัวควบคุมอื่นเช่น ItemsControl หรือ StackPanel

ป้อนคำอธิบายรูปภาพที่นี่


person sahap    schedule 03.03.2015    source แหล่งที่มา
comment
ฉันพบคำตอบแล้วใช้งานได้! stackoverflow.com/questions/22812456 /   -  person sahap    schedule 10.03.2015


คำตอบ (4)


คุณใช้ ListView เฉพาะเมื่อคุณต้องการให้องค์ประกอบต่างๆ ในแนวตั้ง ไม่เช่นนั้น GridView จะแสดงสิ่งที่คุณต้องการทั้งหมด นำเสนอรายการในแนวนอน

การทำงานส่วนใหญ่ของทั้งสองก็เหมือนกัน

person Community    schedule 05.03.2015
comment
@Seema_Soam ขอบคุณ แต่ปัญหายังไม่ได้รับการแก้ไข แม้ว่าฉันจะใช้ GridView แต่ฉันไม่พบตัวอย่างสำหรับตัวอย่างที่แสดง - person sahap; 05.03.2015

ถ้าฉันเข้าใจความต้องการของคุณถูกต้อง คุณสามารถมีตารางที่มีสองเซลล์ได้ ในเซลล์ด้านซ้ายจะเป็น scrollviewer พร้อม stackpanel ในเซลล์ที่สองจะเป็น scrollviewer พร้อม wrappanel ในแนวตั้ง

หากคุณต้องการรวมข้อมูลกับบางแหล่งรายการ ให้ใช้ itemscontrols กับ ItemsPanelTemplate แบบกำหนดเอง - stackpanel, wrappanel, Uniform grid, Canvas หรือแผงใดก็ได้ที่คุณต้องการ

แก้ไข: โค้ดตัวอย่างโดยใช้สองเซลล์ที่มี ListView และ IntemsControl โดยแต่ละเซลล์อยู่ใน scrollviewer ของตัวเอง:

<ScrollViewer HorizontalScrollBarVisibility="Disabled">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ListView x:Name="StudentsListView"  ItemsSource="{Binding Students}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border Background="#484" Height="90"  Width="200">
                        <TextBlock Text="{Binding Name}" FontSize="24"  HorizontalAlignment="Center" VerticalAlignment="Center"  />
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" ZoomMode="Disabled">
            <ItemsControl ItemsSource="{Binding Students}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding Markings}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Background="#888" Height="90" Width="90" Margin="5">
                                        <TextBlock Text="{Binding }" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center"  />
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>


    </Grid>
</ScrollViewer>

public class ViewModel
{
    public ViewModel()
    {
        Students = Enumerable.Range(0, 25)
            .Select(i => new Student
            {
                Name = "Student " + i,
                Markings = Enumerable.Range(1, 30).Select(j => (j + i) % 5 + 1).ToList()
            }).ToList();
    }

    public List<Student> Students { get; set; }
}

public class Student
{
    public string Name { get; set; }
    public List<int> Markings { get; set; }
}

และผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่

person Liero    schedule 06.03.2015
comment
ใช่ แต่ถ้าฉันต้องการเลื่อนแผงสแต็กแนวตั้งแรก... แล้วเซลล์ที่สองล่ะ? มันจะเลื่อนกับเซลล์แรกด้วยกันไหม? ในทางกลับกัน - person sahap; 06.03.2015
comment
ฉันไม่ค่อยเข้าใจมัน คุณจะมีโปรแกรมดูเลื่อนสองตัว โดยแต่ละอันจะถูกเลื่อนแยกกัน ขึ้นอยู่กับว่าเคอร์เซอร์เมาส์ของคุณอยู่ที่ไหน คุณต้องการพฤติกรรมพิเศษบางอย่างหรือไม่ เช่น เมื่อคุณเลื่อนเซลล์แรกหายไปและไปถึงจุดสิ้นสุด เซลล์ที่สองควรเริ่มเลื่อนหรือไม่ - person Liero; 06.03.2015
comment
ไม่ คุณลองนึกภาพสิ่งที่เรามีรายชื่อนักเรียน เซลล์แรกของตารางที่มีเครื่องหมายรายวันในเซลล์ที่สองของตารางได้ไหม ใช่ มันง่ายที่จะจินตนาการ แต่ฉันไม่สามารถเขียนโค้ดใน XAML ได้ - person sahap; 06.03.2015
comment
ในกรณีนี้มันง่ายมาก ใช้ listview ในเซลล์แรกและ gridview ในเซลล์ที่สอง - person Liero; 06.03.2015
comment
โปรดดูภาพการรับรู้ของฉัน: tinypic.com/r/24wyidj/8 โซนสีน้ำเงิน ต้องเลื่อนด้วยโซนสีส้ม แต่โซนสีส้มอาจมีเวลา 30 วัน และตารางเครื่องหมายนี้ไม่พอดีกับหน้าจอ ดังนั้น โซนสีส้มต้องเลื่อนได้ แต่โซนสีน้ำเงินต้องแก้ไข - person sahap; 07.03.2015
comment
ฉันเข้าใจแล้ว. โดยพื้นฐานแล้วคุณต้องการ datagrid ที่มีตัวอ่านแถวคงที่ ala excel บางทีคุณควรมองหา datagrid ของบุคคลที่สามดังกล่าว อย่างไรก็ตาม ฉันได้แก้ไขตัวอย่างของฉันแล้ว - person Liero; 07.03.2015
comment
ใช่ ตัวอย่างของฉันดูเหมือนคุณแล้ว... ฉันคิดว่าคำถามไม่ใช่เรื่องง่าย - person sahap; 07.03.2015

คุณสามารถดำเนินการนี้ได้โดยใส่ทั้งแถวลงในเทมเพลตข้อมูล และใช้คอลัมน์ตารางเพื่อกำหนดความกว้าง:

    <ListView Width="500" Height="500" ItemsSource="{Binding Data}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Item}" Grid.Column="0"/>
                    <ListView ItemsSource="{Binding SubItems}" Grid.Column="1"
                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                ScrollViewer.HorizontalScrollMode="Enabled"
                                SelectionMode="None">
                        <ListView.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel
                                    Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ListView.ItemsPanel>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
person Jon    schedule 09.03.2015
comment
ตามตัวอย่าง คุณอาจเห็นได้ใน Excel สำหรับ windows phone - person sahap; 10.03.2015
comment
ฉันคิดว่านั่นคือสิ่งที่คุณต้องการ หากคุณต้องการให้เลื่อนทั้งหมดพร้อมกัน มีตัวอย่างมากมายใน SO - person Jon; 11.03.2015

ตัวอย่างการทำงานง่ายๆ: การเชื่อมโยงเฉพาะออฟเซ็ตแนวตั้งของ scrollviewers สองตัวเท่านั้น

และฉันพบตัวอย่างขั้นสูงในตัวอย่างที่ 5 ของ "อินพุตและการจัดการ XAML - แนวคิดขั้นสูง": https://code.msdn.microsoft.com/windowsapps/XAML-input-and-manipulation-44125241

person sahap    schedule 10.03.2015