feat: enhance Carousel.
This commit is contained in:
parent
e4ecbfd1e8
commit
fa8b2d1f21
@ -8,7 +8,7 @@
|
|||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<UserControl.Styles>
|
<UserControl.Styles>
|
||||||
<Style Selector="Border">
|
<Style Selector="Carousel">
|
||||||
<Setter Property="Height" Value="200" />
|
<Setter Property="Height" Value="200" />
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TextBlock">
|
<Style Selector="TextBlock">
|
||||||
@ -19,9 +19,6 @@
|
|||||||
</UserControl.Styles>
|
</UserControl.Styles>
|
||||||
<StackPanel Spacing="20">
|
<StackPanel Spacing="20">
|
||||||
<Carousel Theme="{DynamicResource FullCarousel}">
|
<Carousel Theme="{DynamicResource FullCarousel}">
|
||||||
<Carousel.PageTransition>
|
|
||||||
<PageSlide Orientation="Horizontal" Duration="0.25" />
|
|
||||||
</Carousel.PageTransition>
|
|
||||||
<Border Background="#EAF5FF">
|
<Border Background="#EAF5FF">
|
||||||
<TextBlock Text="Text 1" />
|
<TextBlock Text="Text 1" />
|
||||||
</Border>
|
</Border>
|
||||||
@ -35,10 +32,8 @@
|
|||||||
<TextBlock Text="Text 4" />
|
<TextBlock Text="Text 4" />
|
||||||
</Border>
|
</Border>
|
||||||
</Carousel>
|
</Carousel>
|
||||||
<Carousel Classes="Line" Theme="{DynamicResource FullCarousel}">
|
<Carousel Theme="{DynamicResource FullCarousel}"
|
||||||
<Carousel.PageTransition>
|
Classes="Line">
|
||||||
<PageSlide Orientation="Horizontal" Duration="0.25" />
|
|
||||||
</Carousel.PageTransition>
|
|
||||||
<Border Background="#EAF5FF">
|
<Border Background="#EAF5FF">
|
||||||
<TextBlock Text="Text 1" />
|
<TextBlock Text="Text 1" />
|
||||||
</Border>
|
</Border>
|
||||||
@ -52,10 +47,8 @@
|
|||||||
<TextBlock Text="Text 4" />
|
<TextBlock Text="Text 4" />
|
||||||
</Border>
|
</Border>
|
||||||
</Carousel>
|
</Carousel>
|
||||||
<Carousel Classes="Columnar Left" Theme="{DynamicResource FullCarousel}">
|
<Carousel Theme="{DynamicResource FullCarousel}"
|
||||||
<Carousel.PageTransition>
|
Classes="Columnar Left">
|
||||||
<PageSlide Orientation="Horizontal" Duration="0.25" />
|
|
||||||
</Carousel.PageTransition>
|
|
||||||
<Border Background="#EAF5FF">
|
<Border Background="#EAF5FF">
|
||||||
<TextBlock Text="Text 1" />
|
<TextBlock Text="Text 1" />
|
||||||
</Border>
|
</Border>
|
||||||
@ -70,4 +63,4 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</Carousel>
|
</Carousel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
@ -4,6 +4,64 @@
|
|||||||
xmlns:converters="clr-namespace:Semi.Avalonia.Converters"
|
xmlns:converters="clr-namespace:Semi.Avalonia.Converters"
|
||||||
x:CompileBindings="True">
|
x:CompileBindings="True">
|
||||||
<converters:ItemToObjectConverter x:Key="ItemsConverter" />
|
<converters:ItemToObjectConverter x:Key="ItemsConverter" />
|
||||||
|
<Design.PreviewWith>
|
||||||
|
<StackPanel Spacing="20" Width="800" Height="800">
|
||||||
|
<StackPanel.Styles>
|
||||||
|
<Style Selector="Carousel">
|
||||||
|
<Setter Property="Height" Value="200" />
|
||||||
|
</Style>
|
||||||
|
<Style Selector="TextBlock">
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
<Setter Property="Foreground" Value="#1C1F23" />
|
||||||
|
</Style>
|
||||||
|
</StackPanel.Styles>
|
||||||
|
<Carousel Theme="{DynamicResource FullCarousel}">
|
||||||
|
<Border Background="#EAF5FF">
|
||||||
|
<TextBlock Text="Text 1" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#F9F9F9">
|
||||||
|
<TextBlock Text="Text 2" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FFF8EA">
|
||||||
|
<TextBlock Text="Text 3" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FEF2ED">
|
||||||
|
<TextBlock Text="Text 4" />
|
||||||
|
</Border>
|
||||||
|
</Carousel>
|
||||||
|
<Carousel Theme="{DynamicResource FullCarousel}"
|
||||||
|
Classes="Line">
|
||||||
|
<Border Background="#EAF5FF">
|
||||||
|
<TextBlock Text="Text 1" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#F9F9F9">
|
||||||
|
<TextBlock Text="Text 2" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FFF8EA">
|
||||||
|
<TextBlock Text="Text 3" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FEF2ED">
|
||||||
|
<TextBlock Text="Text 4" />
|
||||||
|
</Border>
|
||||||
|
</Carousel>
|
||||||
|
<Carousel Theme="{DynamicResource FullCarousel}"
|
||||||
|
Classes="Columnar Left">
|
||||||
|
<Border Background="#EAF5FF">
|
||||||
|
<TextBlock Text="Text 1" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#F9F9F9">
|
||||||
|
<TextBlock Text="Text 2" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FFF8EA">
|
||||||
|
<TextBlock Text="Text 3" />
|
||||||
|
</Border>
|
||||||
|
<Border Background="#FEF2ED">
|
||||||
|
<TextBlock Text="Text 4" />
|
||||||
|
</Border>
|
||||||
|
</Carousel>
|
||||||
|
</StackPanel>
|
||||||
|
</Design.PreviewWith>
|
||||||
<ControlTheme x:Key="{x:Type Carousel}" TargetType="Carousel">
|
<ControlTheme x:Key="{x:Type Carousel}" TargetType="Carousel">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate>
|
<ControlTemplate>
|
||||||
@ -25,22 +83,16 @@
|
|||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="CarouselIndicatorDotListBoxItem" TargetType="ListBoxItem">
|
<ControlTheme x:Key="CarouselIndicatorDotListBoxItem" TargetType="ListBoxItem">
|
||||||
<!-- Use fit in different color themes, Use Foreground to normal, Background to hover, BorderBrush to Selected -->
|
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" />
|
<Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" />
|
||||||
|
<Setter Property="Margin" Value="4 0"/>
|
||||||
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="ListBoxItem">
|
<ControlTemplate TargetType="ListBoxItem">
|
||||||
<Panel>
|
<Ellipse
|
||||||
<Border Padding="4" Background="Transparent">
|
Name="Container"
|
||||||
<Ellipse
|
Width="{DynamicResource CarouselIndicatorWidth}"
|
||||||
Name="Container"
|
Height="{DynamicResource CarouselIndicatorHeight}"
|
||||||
Width="{DynamicResource CarouselIndicatorWidth}"
|
Fill="{TemplateBinding Foreground}" />
|
||||||
Height="{DynamicResource CarouselIndicatorHeight}"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Fill="{TemplateBinding Foreground}" />
|
|
||||||
</Border>
|
|
||||||
</Panel>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^:pointerover /template/ Ellipse#Container">
|
<Style Selector="^:pointerover /template/ Ellipse#Container">
|
||||||
@ -55,56 +107,48 @@
|
|||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="CarouselIndicatorLineListBoxItem" TargetType="ListBoxItem">
|
<ControlTheme x:Key="CarouselIndicatorLineListBoxItem" TargetType="ListBoxItem">
|
||||||
<!-- Use fit in different color themes, Use Foreground to normal, Background to hover, BorderBrush to Selected -->
|
<Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" />
|
||||||
|
<Setter Property="Margin" Value="2 0"/>
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
<Setter Property="Background" Value="{DynamicResource CarouselIndicatorForeground}" />
|
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="ListBoxItem">
|
<ControlTemplate TargetType="ListBoxItem">
|
||||||
<Panel Background="Transparent">
|
<Rectangle
|
||||||
<Border Padding="2,0" Background="Transparent">
|
Name="Container"
|
||||||
<Border
|
Height="{DynamicResource CarouselIndicatorLineHeight}"
|
||||||
Name="Container"
|
Fill="{TemplateBinding Foreground}" />
|
||||||
Width="{DynamicResource CarouselIndicatorLineWidth}"
|
|
||||||
Height="{DynamicResource CarouselIndicatorLineHeight}"
|
|
||||||
Background="{TemplateBinding Background}" />
|
|
||||||
</Border>
|
|
||||||
</Panel>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^:pointerover /template/ Border#Container">
|
<Style Selector="^:pointerover /template/ Rectangle#Container">
|
||||||
<Setter Property="Background" Value="{DynamicResource CarouselIndicatorPointeroverForeground}" />
|
<Setter Property="Fill" Value="{DynamicResource CarouselIndicatorPointeroverForeground}" />
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^:pressed /template/ Border#Container">
|
<Style Selector="^:pressed /template/ Rectangle#Container">
|
||||||
<Setter Property="Background" Value="{DynamicResource CarouselIndicatorPressedForeground}" />
|
<Setter Property="Fill" Value="{DynamicResource CarouselIndicatorPressedForeground}" />
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^:selected /template/ Border#Container">
|
<Style Selector="^:selected /template/ Rectangle#Container">
|
||||||
<Setter Property="Background" Value="{DynamicResource CarouselIndicatorSelectedForeground}" />
|
<Setter Property="Fill" Value="{DynamicResource CarouselIndicatorSelectedForeground}" />
|
||||||
</Style>
|
</Style>
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="CarouselIndicatorColumnarListBoxItem" TargetType="ListBoxItem">
|
<ControlTheme x:Key="CarouselIndicatorColumnarListBoxItem" TargetType="ListBoxItem">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" />
|
||||||
|
<Setter Property="Width" Value="{DynamicResource CarouselIndicatorColumnarWidth}"/>
|
||||||
|
<Setter Property="Height" Value="{DynamicResource CarouselIndicatorColumnarSelectedHeight}"/>
|
||||||
|
<Setter Property="Margin" Value="2 0"/>
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
<Setter Property="Background" Value="{DynamicResource CarouselIndicatorForeground}" />
|
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="ListBoxItem">
|
<ControlTemplate TargetType="ListBoxItem">
|
||||||
<Panel Background="Transparent">
|
<Rectangle
|
||||||
<Border Padding="2,0" Background="Transparent">
|
Name="Container"
|
||||||
<Border Width="{DynamicResource CarouselIndicatorColumnarWidth}" Height="{DynamicResource CarouselIndicatorColumnarSelectedHeight}">
|
Width="{DynamicResource CarouselIndicatorColumnarWidth}"
|
||||||
<Rectangle
|
Height="{DynamicResource CarouselIndicatorColumnarHeight}"
|
||||||
Name="Container"
|
VerticalAlignment="Bottom"
|
||||||
Width="{DynamicResource CarouselIndicatorColumnarWidth}"
|
Fill="{TemplateBinding Foreground}">
|
||||||
Height="{DynamicResource CarouselIndicatorColumnarHeight}"
|
<Rectangle.Transitions>
|
||||||
VerticalAlignment="Bottom"
|
<Transitions>
|
||||||
Fill="{TemplateBinding Background}">
|
<DoubleTransition Property="Height" Duration="0:0:0.2" />
|
||||||
<Rectangle.Transitions>
|
</Transitions>
|
||||||
<Transitions>
|
</Rectangle.Transitions>
|
||||||
<DoubleTransition Property="Height" Duration="0:0:0.2" />
|
</Rectangle>
|
||||||
</Transitions>
|
|
||||||
</Rectangle.Transitions>
|
|
||||||
</Rectangle>
|
|
||||||
</Border>
|
|
||||||
</Border>
|
|
||||||
</Panel>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^:pointerover /template/ Rectangle#Container">
|
<Style Selector="^:pointerover /template/ Rectangle#Container">
|
||||||
@ -120,29 +164,29 @@
|
|||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="CarouselButton" TargetType="Button">
|
<ControlTheme x:Key="CarouselButton" TargetType="Button">
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
<Setter Property="Width" Value="32" />
|
||||||
|
<Setter Property="Height" Value="32" />
|
||||||
<Setter Property="Foreground" Value="{DynamicResource CarouselButtonForeground}" />
|
<Setter Property="Foreground" Value="{DynamicResource CarouselButtonForeground}" />
|
||||||
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="Button">
|
<ControlTemplate TargetType="Button">
|
||||||
<Grid Background="Transparent">
|
<PathIcon
|
||||||
<PathIcon
|
Theme="{DynamicResource InnerPathIcon}"
|
||||||
Theme="{DynamicResource InnerPathIcon}"
|
Width="{TemplateBinding Width}"
|
||||||
Width="32"
|
Height="{TemplateBinding Height}"
|
||||||
Height="32"
|
Data="{DynamicResource CarouselButtonGlyph}"
|
||||||
Data="{DynamicResource CarouselButtonGlyph}"
|
Foreground="{TemplateBinding Foreground}" />
|
||||||
Foreground="{TemplateBinding Foreground}" />
|
|
||||||
</Grid>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^:pointerover /template/ PathIcon">
|
<Style Selector="^:pointerover /template/ PathIcon">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource CarouselButtonPointeroverForeground}" />
|
<Setter Property="Foreground" Value="{DynamicResource CarouselButtonPointeroverForeground}" />
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^:pointerover /template/ PathIcon">
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource CarouselButtonPressedForeground}" />
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="FullCarousel" TargetType="Carousel">
|
<ControlTheme x:Key="FullCarousel" TargetType="Carousel">
|
||||||
|
<Setter Property="PageTransition">
|
||||||
|
<PageSlide Orientation="Horizontal" Duration="0.3" />
|
||||||
|
</Setter>
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="Carousel">
|
<ControlTemplate TargetType="Carousel">
|
||||||
<Grid ColumnDefinitions="Auto, *, Auto" RowDefinitions="*, Auto">
|
<Grid ColumnDefinitions="Auto, *, Auto" RowDefinitions="*, Auto">
|
||||||
@ -165,16 +209,14 @@
|
|||||||
<ListBox
|
<ListBox
|
||||||
Name="PART_ItemsPresenter2"
|
Name="PART_ItemsPresenter2"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="0"
|
||||||
MaxHeight="30"
|
Grid.ColumnSpan="3"
|
||||||
Margin="0,8"
|
Margin="32"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
ItemContainerTheme="{DynamicResource CarouselIndicatorDotListBoxItem}"
|
ItemContainerTheme="{DynamicResource CarouselIndicatorDotListBoxItem}"
|
||||||
ItemsSource="{TemplateBinding ItemCount,
|
ItemsSource="{TemplateBinding ItemCount, Mode=OneWay, Converter={StaticResource ItemsConverter}}"
|
||||||
Mode=OneWay,
|
SelectedIndex="{TemplateBinding SelectedIndex, Mode=TwoWay}">
|
||||||
Converter={StaticResource ItemsConverter}}"
|
|
||||||
SelectedIndex="{Binding SelectedIndex, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}">
|
|
||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<StackPanel Orientation="Horizontal" />
|
<StackPanel Orientation="Horizontal" />
|
||||||
@ -185,30 +227,29 @@
|
|||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
|
Theme="{DynamicResource CarouselButton}"
|
||||||
Margin="{DynamicResource CarouselButtonMargin}"
|
Margin="{DynamicResource CarouselButtonMargin}"
|
||||||
VerticalAlignment="Center"
|
|
||||||
Background="{DynamicResource CarouselButtonPointeroverForeground}"
|
|
||||||
BorderBrush="{DynamicResource CarouselButtonPressedForeground}"
|
|
||||||
Command="{Binding $parent[Carousel].Previous}"
|
|
||||||
Foreground="{DynamicResource CarouselButtonForeground}"
|
Foreground="{DynamicResource CarouselButtonForeground}"
|
||||||
Theme="{DynamicResource CarouselButton}" />
|
Command="{Binding $parent[Carousel].Previous}" />
|
||||||
<Button
|
<Button
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
|
Theme="{DynamicResource CarouselButton}"
|
||||||
Margin="{DynamicResource CarouselButtonMargin}"
|
Margin="{DynamicResource CarouselButtonMargin}"
|
||||||
VerticalAlignment="Center"
|
|
||||||
Background="{DynamicResource CarouselButtonPointeroverForeground}"
|
|
||||||
BorderBrush="{DynamicResource CarouselButtonPressedForeground}"
|
|
||||||
Command="{Binding $parent[Carousel].Next}"
|
|
||||||
Foreground="{DynamicResource CarouselButtonForeground}"
|
Foreground="{DynamicResource CarouselButtonForeground}"
|
||||||
RenderTransform="rotate(180deg)"
|
Command="{Binding $parent[Carousel].Next}"
|
||||||
Theme="{DynamicResource CarouselButton}" />
|
RenderTransform="rotate(180deg)" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^.Line /template/ ListBox#PART_ItemsPresenter2">
|
<Style Selector="^.Line /template/ ListBox#PART_ItemsPresenter2">
|
||||||
<Setter Property="ItemContainerTheme" Value="{DynamicResource CarouselIndicatorLineListBoxItem}" />
|
<Setter Property="ItemContainerTheme" Value="{DynamicResource CarouselIndicatorLineListBoxItem}" />
|
||||||
|
<Setter Property="ItemsPanel">
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<UniformGrid Columns="{TemplateBinding ItemCount}" Rows="1" Width="240" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^.Columnar /template/ ListBox#PART_ItemsPresenter2">
|
<Style Selector="^.Columnar /template/ ListBox#PART_ItemsPresenter2">
|
||||||
<Setter Property="ItemContainerTheme" Value="{DynamicResource CarouselIndicatorColumnarListBoxItem}" />
|
<Setter Property="ItemContainerTheme" Value="{DynamicResource CarouselIndicatorColumnarListBoxItem}" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user