XAML GridView di GridView dengan orientasi berbeda

(Judul diedit)

Bagaimana melakukan ini dengan XAML? Lebar Horizontal ditetapkan dan harus dapat digulir.

Mungkin GridView atau kontrol lain seperti ItemsControl atau StackPanel.

masukkan deskripsi gambar di sini


person sahap    schedule 03.03.2015    source sumber
comment
Saya menemukan jawabannya dan berhasil! stackoverflow.com/questions/22812456 /   -  person sahap    schedule 10.03.2015


Jawaban (4)


Anda menggunakan ListView hanya ketika Anda perlu memiliki elemen dalam arah vertikal, jika tidak, GridView akan menyajikan semua yang Anda perlukan. Ini menyajikan item dalam arah horizontal.

Sebagian besar fungsi keduanya sama.

person Community    schedule 05.03.2015
comment
@Seema_Soam terima kasih, tapi masalahnya belum terpecahkan. Meskipun saya menggunakan GridView, saya tidak dapat menemukan contoh untuk sampel yang diilustrasikan - person sahap; 05.03.2015

Jika saya memahami kebutuhan Anda dengan benar, Anda dapat memiliki kotak dengan dua sel. Di sel kiri akan ada scrollviewer dengan stackpanel, di sel kedua akan ada scrollviewer dengan wrappanel dengan orientasi vertikal.

Jika Anda perlu menggabungkan data ke beberapa sumber item, gunakan kontrol item dengan ItemsPanelTemplate khusus - panel tumpukan, panel pembungkus, kisi seragam, kanvas, atau panel apa pun yang Anda perlukan.

EDIT: contoh kode menggunakan dua sel dengan ListView dan IntemsControl, masing-masing dalam scrollviewernya sendiri:

<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; }
}

dan hasilnya:

masukkan deskripsi gambar di sini

person Liero    schedule 06.03.2015
comment
Ya, tetapi jika saya ingin menggulir panel tumpukan vertikal pertama... Bagaimana dengan sel kedua? Apakah itu akan bergulir dengan sel pertama secara bersamaan? Dan sebaliknya. - person sahap; 06.03.2015
comment
Saya tidak begitu mengerti. Anda akan memiliki dua scrollviewer, masing-masing digulir secara terpisah, tergantung di mana kursor mouse Anda. Apakah Anda memerlukan beberapa perilaku tambahan, seperti ketika Anda menggulir sel pertama hilang dan Anda sampai di akhir, maka sel kedua harus mulai bergulir? - person Liero; 06.03.2015
comment
Tidak, bisakah Anda membayangkan, apa yang kita punya daftar siswa, sel pertama dari kotak dengan nilai sehari-hari di sel kedua dari kotak? Ya, mudah untuk dibayangkan, tetapi saya tidak bisa mengkodekannya dalam XAML. - person sahap; 06.03.2015
comment
Kalau begitu, caranya sangat sederhana. Gunakan tampilan daftar di sel pertama dan tampilan kisi di sel kedua. - person Liero; 06.03.2015
comment
Silakan lihat gambar realisasi saya: tinypic.com/r/24wyidj/8 Zona biru harus bergulir dengan zona oranye. Namun zona oranye mungkin memiliki waktu 30 hari dan tabel nilai ini tidak dapat dimuat di layar, oleh karena itu zona oranye harus dapat digulir, tetapi zona biru harus diperbaiki - person sahap; 07.03.2015
comment
Saya mengerti sekarang. pada dasarnya Anda memerlukan jenis datagrid dengan pembaca baris tetap ala excel. mungkin Anda harus mencari datagrid pihak ketiga tersebut. namun saya telah mengedit sampel saya. - person Liero; 07.03.2015
comment
Ya, sampel saya terlihat seperti sampel Anda sekarang... Pertanyaannya tidak mudah menurut saya - person sahap; 07.03.2015

Anda dapat membuat ini berfungsi dengan memasukkan seluruh baris ke dalam templat data dan menggunakan kolom kisi untuk mengatur lebarnya:

    <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
Sebagai contoh Anda mungkin melihatnya di Excel untuk windows phone - person sahap; 10.03.2015
comment
Saya pikir itulah yang Anda inginkan. Jika Anda ingin semuanya bergulir pada saat yang sama, ada banyak contohnya di SO. - person Jon; 11.03.2015

Contoh kerja sederhana: Menautkan hanya offset vertikal dari dua scrollviewer

Dan saya menemukan contoh lanjutan dalam sampel ke-5 dari "input dan manipulasi XAML - konsep lanjutan": https://code.msdn.microsoft.com/windowsapps/XAML-input-and-manipulation-44125241

person sahap    schedule 10.03.2015