Skip to content

Commit 90ae117

Browse files
authored
Merge branch 'main' into user/mhawker/gridsplitter-tests
2 parents c6f8fee + 1abf8f8 commit 90ae117

11 files changed

+459
-80
lines changed

Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1+
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
22
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
33
<PropertyGroup>
44
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -439,7 +439,7 @@
439439
<Content Include="SamplePages\Menu\Menu.bind" />
440440
<Content Include="SamplePages\InAppNotification\InAppNotificationCode.bind" />
441441
<Content Include="SamplePages\InAppNotification\InAppNotificationXaml.bind" />
442-
<Content Include="SamplePages\ListViewExtensions\ListViewExtensionsCode.bind" />
442+
<Content Include="SamplePages\ListViewExtensions\ListViewExtensionsXaml.bind" />
443443
<Content Include="SamplePages\Implicit Animations\ImplicitAnimationsCode.bind" />
444444
<Content Include="SamplePages\DispatcherQueueHelper\DispatcherQueueHelperCode.bind" />
445445
<Content Include="SamplePages\TextToolbar\TextToolbar.bind" />
@@ -626,6 +626,7 @@
626626
<Content Include="SamplePages\Graph\LoginButtonXaml.bind" />
627627
<Content Include="SamplePages\Graph\PeoplePickerXaml.bind" />
628628
<Content Include="SamplePages\Graph\PersonViewXaml.bind" />
629+
<Content Include="SamplePages\ListViewExtensions\ListViewExtensionsCode.bind" />
629630
</ItemGroup>
630631
<ItemGroup>
631632
<Compile Include="App.xaml.cs">

Microsoft.Toolkit.Uwp.SampleApp/Models/Sample.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using Microsoft.Toolkit.Uwp.Helpers;
2424
using Microsoft.Toolkit.Uwp.Input.GazeInteraction;
2525
using Microsoft.Toolkit.Uwp.SampleApp.Models;
26+
using Microsoft.Toolkit.Uwp.UI;
2627
using Microsoft.Toolkit.Uwp.UI.Animations;
2728
using Microsoft.Toolkit.Uwp.UI.Controls;
2829
using Microsoft.Toolkit.Uwp.UI.Media;
@@ -674,8 +675,9 @@ private static Type LookForTypeByName(string typeName)
674675

675676
// TODO Reintroduce graph controls
676677
// typeof(UserToPersonConverter)) // Search in Microsoft.Toolkit.Graph.Controls
678+
ScrollItemPlacement.Default.GetType(), // Search in Microsoft.Toolkit.Uwp.UI
677679
EasingType.Default.GetType(), // Microsoft.Toolkit.Uwp.UI.Animations
678-
ImageBlendMode.Multiply.GetType(), // Search in Microsoft.Toolkit.Uwp.UI
680+
ImageBlendMode.Multiply.GetType(), // Search in Microsoft.Toolkit.Uwp.UI.Media
679681
Interaction.Enabled.GetType(), // Microsoft.Toolkit.Uwp.Input.GazeInteraction
680682
DataGridGridLinesVisibility.None.GetType(), // Microsoft.Toolkit.Uwp.UI.Controls.DataGrid
681683
GridSplitter.GridResizeDirection.Auto.GetType(), // Microsoft.Toolkit.Uwp.UI.Controls.Layout
Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,9 @@
1-
<Page
2-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6-
xmlns:ui="using:Microsoft.Toolkit.Uwp.UI"
7-
mc:Ignorable="d">
1+
<GridView x:Name="MyGridView"/>
82

9-
<Page.Resources>
10-
<DataTemplate x:Name="NormalTemplate">
11-
<TextBlock Text="{Binding Title}" Foreground="Green"/>
12-
</DataTemplate>
3+
using Microsoft.Toolkit.Uwp.UI;
134

14-
<DataTemplate x:Name="AlternateTemplate">
15-
<TextBlock Text="{Binding Title}" Foreground="Red"/>
16-
</DataTemplate>
17-
</Page.Resources>
5+
// Scrolling with index
6+
await MyGridView.SmoothScrollIntoViewWithIndexAsync(index: int, itemPlacement: ScrollItemPlacement, disableAnimation: bool, scrollIfVisibile: bool, additionalHorizontalOffset: int, additionalVerticalOffset: int);
187

19-
<Grid>
20-
21-
<ListView
22-
x:Name="SampleListView"
23-
Margin="12"
24-
ItemTemplate="{StaticResource NormalTemplate}"
25-
IsItemClickEnabled="True"
26-
ui:ListViewExtensions.Command="{Binding SampleCommand}"
27-
ui:ListViewExtensions.AlternateColor="#33AAAAAA"
28-
ui:ListViewExtensions.AlternateItemTemplate="{StaticResource AlternateTemplate}"
29-
ui:ListViewExtensions.ItemContainerStretchDirection="Both">
30-
</ListView>
31-
</Grid>
32-
</Page>
8+
// Scrolling with item
9+
await MyGridView.SmoothScrollIntoViewWithItemAsync(item: object, itemPlacement: ScrollItemPlacement, disableAnimation: bool, scrollIfVisibile: bool, additionalHorizontalOffset: int, additionalVerticalOffset: int);
Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,69 @@
1-
<Page x:Class="Microsoft.Toolkit.Uwp.SampleApp.SamplePages.ListViewExtensionsPage"
1+
<Page x:Class="Microsoft.Toolkit.Uwp.SampleApp.SamplePages.ListViewExtensionsPage"
22
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5+
xmlns:local="using:Microsoft.Toolkit.Uwp.SampleApp.SamplePages"
56
xmlns:ui="using:Microsoft.Toolkit.Uwp.UI"
67
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
78
mc:Ignorable="d">
89

910
<Page.Resources>
11+
<local:SampleCommand x:Key="SampleCommand" />
12+
1013
<DataTemplate x:Name="NormalTemplate">
11-
<TextBlock Foreground="Green"
12-
Text="{Binding Title}" />
14+
<TextBlock Text="{Binding}" Foreground="Green" VerticalAlignment="Center" FontWeight="Bold"></TextBlock>
1315
</DataTemplate>
1416

1517
<DataTemplate x:Name="AlternateTemplate">
16-
<TextBlock Foreground="Red"
17-
Text="{Binding Title}" />
18+
<TextBlock Text="{Binding}" Foreground="Red" VerticalAlignment="Center" FontWeight="Bold"></TextBlock>
1819
</DataTemplate>
1920
</Page.Resources>
2021

2122
<Grid>
23+
<Grid.ColumnDefinitions>
24+
<ColumnDefinition Width="*" />
25+
<ColumnDefinition Width="Auto" />
26+
</Grid.ColumnDefinitions>
27+
<Grid x:Name="XamlRoot" Grid.Column="0" Margin="12">
28+
<ListView x:Name="SampleListView"
29+
ui:ListViewExtensions.AlternateColor="#33AAAAAA"
30+
ui:ListViewExtensions.AlternateItemTemplate="{StaticResource AlternateTemplate}"
31+
ui:ListViewExtensions.Command="{StaticResource SampleCommand}"
32+
ui:ListViewExtensions.ItemContainerStretchDirection="Both"
33+
IsItemClickEnabled="True"
34+
ItemTemplate="{StaticResource NormalTemplate}" />
35+
</Grid>
2236

23-
<ListView x:Name="SampleListView"
24-
Margin="12"
25-
ui:ListViewExtensions.AlternateColor="#33AAAAAA"
26-
ui:ListViewExtensions.AlternateItemTemplate="{StaticResource AlternateTemplate}"
27-
ui:ListViewExtensions.Command="{Binding SampleCommand}"
28-
ui:ListViewExtensions.ItemContainerStretchDirection="Both"
29-
IsItemClickEnabled="True"
30-
ItemTemplate="{StaticResource NormalTemplate}" />
37+
<StackPanel Grid.Column="1" Margin="5,10,10,0" Width="200">
38+
<TextBlock Text="Smooth Scroll Settings" FontSize="{StaticResource TextStyleLargeFontSize}" Margin="0,0,0,10"/>
39+
<TextBox x:Name="IndexInput"
40+
Header="Index"
41+
InputScope="Number"
42+
Text="100" />
43+
<ComboBox x:Name="ItemPlacementInput"
44+
Header="Item Placement"
45+
SelectedIndex="0">
46+
<x:String>Default</x:String>
47+
<x:String>Left</x:String>
48+
<x:String>Top</x:String>
49+
<x:String>Center</x:String>
50+
<x:String>Right</x:String>
51+
<x:String>Bottom</x:String>
52+
</ComboBox>
53+
<CheckBox x:Name="DisableAnimationInput"
54+
Content="Disable Animation"
55+
IsChecked="False" />
56+
<CheckBox x:Name="ScrollIfVisibileInput"
57+
Content="Scroll If Visible"
58+
IsChecked="True" />
59+
<TextBox x:Name="AdditionalHorizontalOffsetInput"
60+
Header="Horizontal Offset"
61+
InputScope="Number"
62+
Text="0" />
63+
<TextBox x:Name="AdditionalVerticalOffsetInput"
64+
Header="Vertical Offset"
65+
InputScope="Number"
66+
Text="0" />
67+
</StackPanel>
3168
</Grid>
3269
</Page>

Microsoft.Toolkit.Uwp.SampleApp/SamplePages/ListViewExtensions/ListViewExtensionsPage.xaml.cs

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6+
using System.Collections.ObjectModel;
67
using System.Windows.Input;
7-
using Microsoft.Toolkit.Uwp.SampleApp.Common;
8-
using Microsoft.Toolkit.Uwp.SampleApp.Data;
98
using Microsoft.Toolkit.Uwp.UI;
109
using Windows.UI.Popups;
1110
using Windows.UI.Xaml;
@@ -15,29 +14,93 @@ namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages
1514
{
1615
public sealed partial class ListViewExtensionsPage : Page, IXamlRenderListener
1716
{
17+
private ListView sampleListView;
18+
1819
public ListViewExtensionsPage()
1920
{
2021
this.InitializeComponent();
22+
Load();
2123
}
2224

23-
public ICommand SampleCommand => new DelegateCommand<PhotoDataItem>(OnExecuteSampleCommand);
24-
25-
public async void OnXamlRendered(FrameworkElement control)
25+
public void OnXamlRendered(FrameworkElement control)
2626
{
27-
var sampleListView = control.FindChild("SampleListView") as ListView;
27+
sampleListView = control.FindChild("SampleListView") as ListView;
2828

2929
if (sampleListView != null)
3030
{
31-
sampleListView.ItemsSource = await new Data.PhotosDataSource().GetItemsAsync();
31+
sampleListView.ItemsSource = GetOddEvenSource(201);
3232
}
3333

3434
// Transfer Data Context so we can access SampleCommand
3535
control.DataContext = this;
3636
}
3737

38-
private async void OnExecuteSampleCommand(PhotoDataItem item)
38+
private void Load()
39+
{
40+
SampleController.Current.RegisterNewCommand("Start Smooth Scroll", (sender, args) =>
41+
{
42+
var index = int.TryParse(IndexInput.Text, out var i) ? i : 0;
43+
var itemPlacement = ItemPlacementInput.SelectedItem switch
44+
{
45+
"Default" => ScrollItemPlacement.Default,
46+
"Left" => ScrollItemPlacement.Left,
47+
"Top" => ScrollItemPlacement.Top,
48+
"Center" => ScrollItemPlacement.Center,
49+
"Right" => ScrollItemPlacement.Right,
50+
"Bottom" => ScrollItemPlacement.Bottom,
51+
_ => ScrollItemPlacement.Default
52+
};
53+
54+
var disableAnimation = DisableAnimationInput.IsChecked ?? false;
55+
var scrollIfVisibile = ScrollIfVisibileInput.IsChecked ?? true;
56+
var additionalHorizontalOffset = int.TryParse(AdditionalHorizontalOffsetInput.Text, out var ho) ? ho : 0;
57+
var additionalVerticalOffset = int.TryParse(AdditionalVerticalOffsetInput.Text, out var vo) ? vo : 0;
58+
sampleListView.SmoothScrollIntoViewWithIndexAsync(index, itemPlacement, disableAnimation, scrollIfVisibile, additionalHorizontalOffset, additionalVerticalOffset);
59+
});
60+
61+
if (sampleListView != null)
62+
{
63+
sampleListView.ItemsSource = GetOddEvenSource(500);
64+
}
65+
}
66+
67+
private ObservableCollection<string> GetOddEvenSource(int count)
68+
{
69+
var oddEvenSource = new ObservableCollection<string>();
70+
71+
for (int number = 0; number < count; number++)
72+
{
73+
var item = (number % 2) == 0 ? $"{number} - Even" : $"{number} - Odd";
74+
oddEvenSource.Add(item);
75+
}
76+
77+
return oddEvenSource;
78+
}
79+
}
80+
81+
#pragma warning disable SA1402 // File may only contain a single class
82+
internal class SampleCommand : ICommand
83+
#pragma warning restore SA1402 // File may only contain a single class
84+
{
85+
event EventHandler ICommand.CanExecuteChanged
86+
{
87+
add { }
88+
remove { }
89+
}
90+
91+
public bool CanExecute(object parameter) => true;
92+
93+
public void Execute(object parameter)
94+
{
95+
if (parameter is string s)
96+
{
97+
OnExecuteSampleCommand(s);
98+
}
99+
}
100+
101+
private static async void OnExecuteSampleCommand(string item)
39102
{
40-
await new MessageDialog($"You clicked {item.Title} via the 'ListViewExtensions.Command' binding", "Item Clicked").ShowAsync();
103+
await new MessageDialog($"You clicked {item} via the 'ListViewExtensions.Command' binding", "Item Clicked").ShowAsync();
41104
}
42105
}
43106
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<Page
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
xmlns:local="using:Microsoft.Toolkit.Uwp.SampleApp.SamplePages"
7+
xmlns:ui="using:Microsoft.Toolkit.Uwp.UI"
8+
mc:Ignorable="d">
9+
10+
<Page.Resources>
11+
<local:SampleCommand x:Key="SampleCommand" />
12+
13+
<DataTemplate x:Name="NormalTemplate">
14+
<TextBlock Text="{Binding}" Foreground="Green" VerticalAlignment="Center" FontWeight="Bold"></TextBlock>
15+
</DataTemplate>
16+
17+
<DataTemplate x:Name="AlternateTemplate">
18+
<TextBlock Text="{Binding}" Foreground="Red" VerticalAlignment="Center" FontWeight="Bold"></TextBlock>
19+
</DataTemplate>
20+
</Page.Resources>
21+
<ListView
22+
x:Name="SampleListView"
23+
ItemTemplate="{StaticResource NormalTemplate}"
24+
IsItemClickEnabled="True"
25+
ui:ListViewExtensions.Command="{StaticResource SampleCommand}"
26+
ui:ListViewExtensions.AlternateColor="#33AAAAAA"
27+
ui:ListViewExtensions.AlternateItemTemplate="{StaticResource AlternateTemplate}"
28+
ui:ListViewExtensions.ItemContainerStretchDirection="Both">
29+
</ListView>
30+
</Page>

Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1105,7 +1105,8 @@
11051105
"Type": "ListViewExtensionsPage",
11061106
"About": "Extensions for all controls that inherit from ListViewBase like ListView.",
11071107
"CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/main/Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase",
1108-
"XamlCodeFile": "ListViewExtensionsCode.bind",
1108+
"CodeFile": "ListViewExtensionsCode.bind",
1109+
"XamlCodeFile": "ListViewExtensionsXaml.bind",
11091110
"Icon": "/Assets/Helpers.png",
11101111
"DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/extensions/ListViewExtensions.md"
11111112
},

Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ListViewExtensions.cs renamed to Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ListViewExtensions.AlternateRows.cs

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ public static partial class ListViewExtensions
2828
/// </summary>
2929
public static readonly DependencyProperty AlternateItemTemplateProperty = DependencyProperty.RegisterAttached("AlternateItemTemplate", typeof(DataTemplate), typeof(ListViewExtensions), new PropertyMetadata(null, OnAlternateItemTemplatePropertyChanged));
3030

31-
/// <summary>
32-
/// Attached <see cref="DependencyProperty"/> for setting the container content stretch direction on the <see cref="Windows.UI.Xaml.Controls.ListViewBase"/>
33-
/// </summary>
34-
public static readonly DependencyProperty ItemContainerStretchDirectionProperty = DependencyProperty.RegisterAttached("ItemContainerStretchDirection", typeof(ItemContainerStretchDirection), typeof(ListViewExtensions), new PropertyMetadata(null, OnItemContainerStretchDirectionPropertyChanged));
35-
3631
/// <summary>
3732
/// Gets the alternate <see cref="Brush"/> associated with the specified <see cref="Windows.UI.Xaml.Controls.ListViewBase"/>
3833
/// </summary>
@@ -73,26 +68,6 @@ public static void SetAlternateItemTemplate(Windows.UI.Xaml.Controls.ListViewBas
7368
obj.SetValue(AlternateItemTemplateProperty, value);
7469
}
7570

76-
/// <summary>
77-
/// Gets the stretch <see cref="ItemContainerStretchDirection"/> associated with the specified <see cref="Windows.UI.Xaml.Controls.ListViewBase"/>
78-
/// </summary>
79-
/// <param name="obj">The <see cref="Windows.UI.Xaml.Controls.ListViewBase"/> to get the associated <see cref="ItemContainerStretchDirection"/> from</param>
80-
/// <returns>The <see cref="ItemContainerStretchDirection"/> associated with the <see cref="Windows.UI.Xaml.Controls.ListViewBase"/></returns>
81-
public static ItemContainerStretchDirection GetItemContainerStretchDirection(Windows.UI.Xaml.Controls.ListViewBase obj)
82-
{
83-
return (ItemContainerStretchDirection)obj.GetValue(ItemContainerStretchDirectionProperty);
84-
}
85-
86-
/// <summary>
87-
/// Sets the stretch <see cref="ItemContainerStretchDirection"/> associated with the specified <see cref="Windows.UI.Xaml.Controls.ListViewBase"/>
88-
/// </summary>
89-
/// <param name="obj">The <see cref="Windows.UI.Xaml.Controls.ListViewBase"/> to associate the <see cref="ItemContainerStretchDirection"/> with</param>
90-
/// <param name="value">The <see cref="ItemContainerStretchDirection"/> for binding to the <see cref="Windows.UI.Xaml.Controls.ListViewBase"/></param>
91-
public static void SetItemContainerStretchDirection(Windows.UI.Xaml.Controls.ListViewBase obj, ItemContainerStretchDirection value)
92-
{
93-
obj.SetValue(ItemContainerStretchDirectionProperty, value);
94-
}
95-
9671
private static void OnAlternateColorPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
9772
{
9873
Windows.UI.Xaml.Controls.ListViewBase listViewBase = sender as Windows.UI.Xaml.Controls.ListViewBase;

0 commit comments

Comments
 (0)