Browse Source

Allow changing orientation in virt sample.

pull/545/head
Steven Kirk 10 years ago
parent
commit
0d32bc420c
  1. 7
      samples/VirtualizationTest/MainWindow.xaml
  2. 10
      samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs
  3. 5
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

7
samples/VirtualizationTest/MainWindow.xaml

@ -7,6 +7,8 @@
Gap="4">
<DropDown Items="{Binding VirtualizationModes}"
SelectedItem="{Binding VirtualizationMode}"/>
<DropDown Items="{Binding Orientations}"
SelectedItem="{Binding Orientation}"/>
<TextBox Watermark="Item Count"
UseFloatingWatermark="True"
Text="{Binding ItemCount}"/>
@ -32,6 +34,11 @@
SelectedItems="{Binding SelectedItems}"
SelectionMode="Multiple"
VirtualizationMode="{Binding VirtualizationMode}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="{Binding Orientation}"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"/>

10
samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs

@ -17,6 +17,7 @@ namespace VirtualizationTest.ViewModels
private int _newItemIndex;
private IReactiveList<ItemViewModel> _items;
private string _prefix = "Item";
private Orientation _orientation;
private ItemVirtualizationMode _virtualizationMode = ItemVirtualizationMode.Simple;
public MainWindowViewModel()
@ -53,6 +54,15 @@ namespace VirtualizationTest.ViewModels
private set { this.RaiseAndSetIfChanged(ref _items, value); }
}
public Orientation Orientation
{
get { return _orientation; }
set { this.RaiseAndSetIfChanged(ref _orientation, value); }
}
public IEnumerable<Orientation> Orientations =>
Enum.GetValues(typeof(Orientation)).Cast<Orientation>();
public ItemVirtualizationMode VirtualizationMode
{
get { return _virtualizationMode; }

5
src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

@ -72,7 +72,10 @@ namespace Avalonia.Controls.Presenters
// offset the panel by the height of the first item.
var firstIndex = ItemCount - panel.Children.Count;
RecycleContainersForMove(firstIndex - FirstIndex);
panel.PixelOffset = panel.Children[0].Bounds.Height;
panel.PixelOffset = VirtualizingPanel.ScrollDirection == Orientation.Vertical ?
panel.Children[0].Bounds.Height :
panel.Children[0].Bounds.Width;
}
}
}

Loading…
Cancel
Save