Browse Source

Allow switching ItemsRepeater layout in ControlCatalog.

Steven Kirk 6 years ago
parent
commit
89268e9df6

+ 21 - 3
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml

@@ -1,7 +1,25 @@
 <UserControl xmlns="https://github.com/avaloniaui"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              x:Class="ControlCatalog.Pages.ItemsRepeaterPage">
-    <ScrollViewer HorizontalScrollBarVisibility="Disabled">
-        <ItemsRepeater Items="{Binding}"/>
-    </ScrollViewer>
+  <DockPanel>
+    <StackPanel DockPanel.Dock="Top" Spacing="4" Margin="0 0 0 16">
+      <TextBlock Classes="h1">ItemsRepeater</TextBlock>
+      <TextBlock Classes="h2">A data-driven collection control that incorporates a flexible layout system, custom views, and virtualization.</TextBlock>
+    </StackPanel>
+    <StackPanel DockPanel.Dock="Right" Margin="8 0">
+      <ComboBox SelectedIndex="0" SelectionChanged="LayoutChanged">
+        <ComboBoxItem>Stack - Vertical</ComboBoxItem>
+        <ComboBoxItem>Stack - Horizontal</ComboBoxItem>
+        <ComboBoxItem>UniformGrid - Vertical</ComboBoxItem>
+        <ComboBoxItem>UniformGrid - Horizontal</ComboBoxItem>
+      </ComboBox>
+    </StackPanel>
+    <Border BorderThickness="1" BorderBrush="{DynamicResource ThemeBorderMidBrush}" Margin="0 0 0 16">
+      <ScrollViewer Name="scroller"
+                    HorizontalScrollBarVisibility="Auto"
+                    VerticalScrollBarVisibility="Auto">
+        <ItemsRepeater Name="repeater" Items="{Binding}"/>
+      </ScrollViewer>
+    </Border>
+  </DockPanel>
 </UserControl>

+ 51 - 2
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs

@@ -3,17 +3,23 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Repeaters;
 using Avalonia.Markup.Xaml;
 
 namespace ControlCatalog.Pages
 {
     public class ItemsRepeaterPage : UserControl
     {
+        private ItemsRepeater _repeater;
+        private ScrollViewer _scroller;
+
         public ItemsRepeaterPage()
         {
             this.InitializeComponent();
-            DataContext = Enumerable.Range(1, 100000).Select(i => $"Item {i}" )
-                .ToArray();
+            _repeater = this.FindControl<ItemsRepeater>("repeater");
+            _scroller = this.FindControl<ScrollViewer>("scroller");
+            DataContext = Enumerable.Range(1, 100000).Select(i => $"Item {i}" ).ToArray();
         }
 
         private void InitializeComponent()
@@ -21,5 +27,48 @@ namespace ControlCatalog.Pages
             AvaloniaXamlLoader.Load(this);
         }
 
+        private void LayoutChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (_repeater == null)
+            {
+                return;
+            }
+
+            var comboBox = (ComboBox)sender;
+
+            switch (comboBox.SelectedIndex)
+            {
+                case 0:
+                    _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _repeater.Layout = new StackLayout { Orientation = Orientation.Vertical };
+                    break;
+                case 1:
+                    _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _repeater.Layout = new StackLayout { Orientation = Orientation.Horizontal };
+                    break;
+                case 2:
+                    _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
+                    _repeater.Layout = new UniformGridLayout
+                    {
+                        Orientation = Orientation.Vertical,
+                        MinItemWidth = 200,
+                        MinItemHeight = 200,
+                    };
+                    break;
+                case 3:
+                    _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
+                    _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
+                    _repeater.Layout = new UniformGridLayout
+                    {
+                        Orientation = Orientation.Horizontal,
+                        MinItemWidth = 200,
+                        MinItemHeight = 200,
+                    };
+                    break;
+            }
+        }
     }
 }