diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-04-26 15:35:52 -0400 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-04-26 15:35:52 -0400 |
commit | 409e10528495238a680c1bf3867a71f758b0d452 (patch) | |
tree | 0cb19f682b0b192ebad3dc0c77cfe32974abe09c /Xamarin.Forms.Platform.WinRT | |
parent | 9ae4ea3c82444561353eb77bf746f96cdbfb4583 (diff) | |
download | xamarin-forms-409e10528495238a680c1bf3867a71f758b0d452.tar.gz xamarin-forms-409e10528495238a680c1bf3867a71f758b0d452.tar.bz2 xamarin-forms-409e10528495238a680c1bf3867a71f758b0d452.zip |
Carousel clean (#135)
CarouselView moving to preview repo
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT')
4 files changed, 22 insertions, 253 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/CarouselViewRenderer.cs b/Xamarin.Forms.Platform.WinRT/CarouselViewRenderer.cs deleted file mode 100644 index f29909df..00000000 --- a/Xamarin.Forms.Platform.WinRT/CarouselViewRenderer.cs +++ /dev/null @@ -1,227 +0,0 @@ -using System; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Linq; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Media; -using WFlipView = Windows.UI.Xaml.Controls.FlipView; -using WBinding = Windows.UI.Xaml.Data.Binding; -using WApp = Windows.UI.Xaml.Application; -using WSize = Windows.Foundation.Size; -using WDataTemplate = Windows.UI.Xaml.DataTemplate; - -#if WINDOWS_UWP - -namespace Xamarin.Forms.Platform.UWP -#else - -namespace Xamarin.Forms.Platform.WinRT -#endif -{ - public class CarouselViewRenderer : ViewRenderer<CarouselView, FrameworkElement> - { - WFlipView _flipView; - - bool _leftAdd; - - ICarouselViewController Controller - { - get - { - return Element; - } - } - - protected override void OnElementChanged(ElementChangedEventArgs<CarouselView> e) - { - base.OnElementChanged(e); - - if (e.OldElement != null) - { - _flipView.SelectionChanged -= SelectionChanged; - _flipView.ItemsSource = null; - Element.CollectionChanged -= CollectionChanged; - } - - if (e.NewElement != null) - { - if (_flipView == null) - { - _flipView = new FlipView - { - IsSynchronizedWithCurrentItem = false, - ItemTemplate = (WDataTemplate)WApp.Current.Resources["ItemTemplate"] - }; - } - - _flipView.ItemsSource = Element.ItemsSource; - _flipView.SelectedIndex = Element.Position; - _flipView.SelectionChanged += SelectionChanged; - Element.CollectionChanged += CollectionChanged; - } - - if (_flipView != Control) - SetNativeControl(_flipView); - } - - protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == "Position" && _flipView.SelectedIndex != Element.Position) - { - if (!_leftAdd) - _flipView.SelectedIndex = Element.Position; - _leftAdd = false; - } - - base.OnElementPropertyChanged(sender, e); - } - - void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - Controller.SendSelectedPositionChanged(_flipView.SelectedIndex); - - switch (e.Action) - { - case NotifyCollectionChangedAction.Add: - if (e.NewStartingIndex <= Element.Position) - { - _leftAdd = true; - int position = Element.Position + e.NewItems.Count; - PositionChanged(position); - } - break; - - case NotifyCollectionChangedAction.Move: - break; - - case NotifyCollectionChangedAction.Remove: - if (Controller.Count == 0) - throw new InvalidOperationException("CarouselView must retain a least one item."); - - if (e.OldStartingIndex < Element.Position) - PositionChanged(Element.Position - e.OldItems.Count); - break; - - case NotifyCollectionChangedAction.Replace: - break; - - case NotifyCollectionChangedAction.Reset: - break; - - default: - throw new Exception($"Enum value '{(int)e.Action}' is not a member of NotifyCollectionChangedAction enumeration."); - } - } - - void PositionChanged(int position) - { - if (!_leftAdd) - _flipView.SelectedIndex = position; - Element.Position = position; - Controller.SendSelectedPositionChanged(position); - } - - void SelectionChanged(object sender, SelectionChangedEventArgs e) - { - object[] addedItems = e.AddedItems.ToArray(); - object[] removedItems = e.RemovedItems.ToArray(); - - object addedItem = addedItems.SingleOrDefault(); - if (addedItem != null) - { - PositionChanged(_flipView.SelectedIndex); - Controller.SendSelectedItemChanged(addedItems.Single()); - } - } - } - - public class ItemControl : ContentControl - { - CarouselView _carouselView; - object _item; - View _view; - - public ItemControl() - { - DataContextChanged += OnDataContextChanged; - } - - CarouselView CarouselView => LoadCarouselView(); - - IItemViewController Controller => CarouselView; - - protected override WSize ArrangeOverride(WSize finalSize) - { - _view.Layout(new Rectangle(0, 0, CarouselView.Width, CarouselView.Height)); - return base.ArrangeOverride(finalSize); - } - - protected override WSize MeasureOverride(WSize availableSize) - { - LoadCarouselView(); - - if (_item != null) - { - SetDataContext(_item); - _item = null; - } - - return base.MeasureOverride(availableSize); - } - - CarouselView LoadCarouselView() - { - if (_carouselView != null) - return _carouselView; - - DependencyObject parent = VisualTreeHelper.GetParent(this); - CarouselViewRenderer renderer = default(CarouselViewRenderer); - - do - { - if (parent == null) - return null; - - renderer = parent as CarouselViewRenderer; - if (renderer != null) - break; - - parent = VisualTreeHelper.GetParent(parent); - } while (true); - - _carouselView = renderer.Element; - return _carouselView; - } - - void OnDataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) - { - object item = args.NewValue; - - if (_carouselView != null) - SetDataContext(item); - - else if (item != null) - _item = item; - } - - void SetDataContext(object item) - { - // type item - object type = Controller.GetItemType(item); - - // activate item - _view = Controller.CreateView(type); - _view.Parent = CarouselView; - _view.Layout(new Rectangle(0, 0, CarouselView.Width, CarouselView.Height)); - - // render item - IVisualElementRenderer renderer = Platform.CreateRenderer(_view); - Platform.SetRenderer(_view, renderer); - Content = renderer; - - // bind item - Controller.BindView(_view, item); - } - } -}
\ No newline at end of file diff --git a/Xamarin.Forms.Platform.WinRT/Properties/AssemblyInfo.cs b/Xamarin.Forms.Platform.WinRT/Properties/AssemblyInfo.cs index f24feecf..d1975076 100644 --- a/Xamarin.Forms.Platform.WinRT/Properties/AssemblyInfo.cs +++ b/Xamarin.Forms.Platform.WinRT/Properties/AssemblyInfo.cs @@ -18,7 +18,6 @@ using Xamarin.Forms.Platform.WinRT; [assembly: ExportRenderer(typeof(Label), typeof(LabelRenderer))] [assembly: ExportRenderer(typeof(Button), typeof(ButtonRenderer))] [assembly: ExportRenderer(typeof(ListView), typeof(ListViewRenderer))] -[assembly: ExportRenderer(typeof(CarouselView), typeof(CarouselViewRenderer))] [assembly: ExportRenderer(typeof(ScrollView), typeof(ScrollViewRenderer))] [assembly: ExportRenderer(typeof(ProgressBar), typeof(ProgressBarRenderer))] [assembly: ExportRenderer(typeof(Slider), typeof(SliderRenderer))] diff --git a/Xamarin.Forms.Platform.WinRT/Resources.xaml b/Xamarin.Forms.Platform.WinRT/Resources.xaml index c1edeeaf..3982521f 100644 --- a/Xamarin.Forms.Platform.WinRT/Resources.xaml +++ b/Xamarin.Forms.Platform.WinRT/Resources.xaml @@ -20,28 +20,24 @@ <Setter Property="Background" Value="{ThemeResource ApplicationPageBackgroundThemeBrush}" /> </Style> - <Style x:Key="ActionSheetList" TargetType="ListView"> - <Setter Property="SelectionMode" Value="None" /> - <Setter Property="ItemContainerStyle"> - <Setter.Value> - <Style TargetType="ListViewItem"> - <Setter Property="Margin" Value="0" /> - <Setter Property="HorizontalContentAlignment" Value="Stretch" /> - </Style> - </Setter.Value> - </Setter> - <Setter Property="ItemTemplate"> - <Setter.Value> - <DataTemplate> - <TextBlock Text="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Center" Style="{ThemeResource SubheaderTextBlockStyle}" /> - </DataTemplate> - </Setter.Value> - </Setter> - </Style> - - <DataTemplate x:Key="ItemTemplate"> - <forms:ItemControl HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" /> - </DataTemplate> + <Style x:Key="ActionSheetList" TargetType="ListView"> + <Setter Property="SelectionMode" Value="None" /> + <Setter Property="ItemContainerStyle"> + <Setter.Value> + <Style TargetType="ListViewItem"> + <Setter Property="Margin" Value="0" /> + <Setter Property="HorizontalContentAlignment" Value="Stretch" /> + </Style> + </Setter.Value> + </Setter> + <Setter Property="ItemTemplate"> + <Setter.Value> + <DataTemplate> + <TextBlock Text="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Center" Style="{ThemeResource SubheaderTextBlockStyle}" /> + </DataTemplate> + </Setter.Value> + </Setter> + </Style> <DataTemplate x:Key="CellTemplate"> <forms:CellControl HorizontalContentAlignment="Stretch" Height="{Binding Cell.RenderHeight,RelativeSource={RelativeSource Mode=Self},Converter={StaticResource HeightConverter}}" /> diff --git a/Xamarin.Forms.Platform.WinRT/Xamarin.Forms.Platform.WinRT.csproj b/Xamarin.Forms.Platform.WinRT/Xamarin.Forms.Platform.WinRT.csproj index 7f41e8ba..6d28b900 100644 --- a/Xamarin.Forms.Platform.WinRT/Xamarin.Forms.Platform.WinRT.csproj +++ b/Xamarin.Forms.Platform.WinRT/Xamarin.Forms.Platform.WinRT.csproj @@ -37,7 +37,8 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> - <NoWarn></NoWarn> + <NoWarn> + </NoWarn> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> @@ -47,7 +48,8 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> - <NoWarn></NoWarn> + <NoWarn> + </NoWarn> </PropertyGroup> <ItemGroup> <!-- A reference to the entire .NET Framework is automatically included --> @@ -66,7 +68,6 @@ </Compile> </ItemGroup> <ItemGroup Condition=" '$(OS)' != 'Unix' "> - <Compile Include="CarouselViewRenderer.cs" /> <Compile Include="NativeViewWrapper.cs" /> <Compile Include="NativeViewWrapperRenderer.cs" /> <Compile Include="ViewExtensions.cs" /> |