feat: WIP some brushes and icon path data. Update height and width limitation.

This commit is contained in:
rabbitism 2023-01-24 00:38:58 +08:00
parent 30842b9150
commit 12c75c1573
4 changed files with 145 additions and 58 deletions

View File

@ -37,6 +37,44 @@
<MenuItem Header="_Second"> <MenuItem Header="_Second">
<MenuItem Header="Second _Menu Item" /> <MenuItem Header="Second _Menu Item" />
</MenuItem> </MenuItem>
<MenuItem Header="Parent">
<MenuItem Header="Child 1" />
<MenuItem Header="Child 2" />
<MenuItem Header="Child 3" />
<Separator />
<MenuItem Header="Child 4" />
<MenuItem Header="Child 5" />
<MenuItem Header="Child 6" />
<MenuItem Header="Child 7" />
<MenuItem Header="Child 8" />
<MenuItem Header="Child 9" />
<MenuItem Header="Child 10" />
<MenuItem Header="Child 11" />
<MenuItem Header="Child 12" />
<MenuItem Header="Child 13" />
<MenuItem Header="Child 14" />
<MenuItem Header="Child 15" />
<MenuItem Header="Child 16" />
<MenuItem Header="Child 17" />
<MenuItem Header="Child 18" />
<MenuItem Header="Child 19" />
<MenuItem Header="Child 4" />
<MenuItem Header="Child 5" />
<MenuItem Header="Child 6" />
<MenuItem Header="Child 7" />
<MenuItem Header="Child 8" />
<MenuItem Header="Child 9" />
<MenuItem Header="Child 10" />
<MenuItem Header="Child 11" />
<MenuItem Header="Child 12" />
<MenuItem Header="Child 13" />
<MenuItem Header="Child 14" />
<MenuItem Header="Child 15" />
<MenuItem Header="Child 16" />
<MenuItem Header="Child 17" />
<MenuItem Header="Child 18" />
<MenuItem Header="Child 19" />
</MenuItem>
</Menu> </Menu>
</StackPanel> </StackPanel>
</UserControl> </UserControl>

View File

@ -8,14 +8,20 @@
<ControlTheme x:Key="MenuScrollViewer" TargetType="ScrollViewer"> <ControlTheme x:Key="MenuScrollViewer" TargetType="ScrollViewer">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate TargetType="ScrollViewer">
<DockPanel> <DockPanel>
<DockPanel.Styles>
<Style Selector="RepeatButton:pressed">
<Setter Property="RenderTransform" Value="{x:Null}" />
</Style>
</DockPanel.Styles>
<RepeatButton <RepeatButton
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
Background="Transparent" Background="Transparent"
BorderThickness="0" BorderThickness="0"
Command="{Binding LineUp, RelativeSource={RelativeSource TemplatedParent}}" Command="{Binding LineUp, RelativeSource={RelativeSource TemplatedParent}}"
CornerRadius="0"
DockPanel.Dock="Top" DockPanel.Dock="Top"
RenderTransform="{x:Null}"> RenderTransform="{x:Null}">
<RepeatButton.IsVisible> <RepeatButton.IsVisible>
@ -26,15 +32,11 @@
<Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</RepeatButton.IsVisible> </RepeatButton.IsVisible>
<Viewbox Width="{DynamicResource ScrollBarButtonArrowIconFontSize}" Height="{DynamicResource ScrollBarButtonArrowIconFontSize}"> <PathIcon
<Path Width="8"
Width="20" Height="8"
Height="20" Data="{DynamicResource MenuScrollViewerUpButtonGlyph}"
HorizontalAlignment="Center" Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" />
VerticalAlignment="Center"
Data="M 19.091797 14.970703 L 10 5.888672 L 0.908203 14.970703 L 0.029297 14.091797 L 10 4.111328 L 19.970703 14.091797 Z"
Fill="{DynamicResource ScrollBarButtonArrowForeground}" />
</Viewbox>
</RepeatButton> </RepeatButton>
<RepeatButton <RepeatButton
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@ -42,6 +44,7 @@
Background="Transparent" Background="Transparent"
BorderThickness="0" BorderThickness="0"
Command="{Binding LineDown, RelativeSource={RelativeSource TemplatedParent}}" Command="{Binding LineDown, RelativeSource={RelativeSource TemplatedParent}}"
CornerRadius="0"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
RenderTransform="{x:Null}"> RenderTransform="{x:Null}">
<RepeatButton.IsVisible> <RepeatButton.IsVisible>
@ -52,15 +55,11 @@
<Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</RepeatButton.IsVisible> </RepeatButton.IsVisible>
<Viewbox Width="{DynamicResource ScrollBarButtonArrowIconFontSize}" Height="{DynamicResource ScrollBarButtonArrowIconFontSize}"> <PathIcon
<Path Width="8"
Width="20" Height="8"
Height="20" Data="{DynamicResource MenuScrollViewerDownButtonGlyph}"
HorizontalAlignment="Center" Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" />
VerticalAlignment="Center"
Data="M 18.935547 4.560547 L 19.814453 5.439453 L 10 15.253906 L 0.185547 5.439453 L 1.064453 4.560547 L 10 13.496094 Z"
Fill="{DynamicResource ScrollBarButtonArrowForeground}" />
</Viewbox>
</RepeatButton> </RepeatButton>
<ScrollContentPresenter <ScrollContentPresenter
Name="PART_ContentPresenter" Name="PART_ContentPresenter"
@ -81,11 +80,32 @@
</DockPanel> </DockPanel>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^ /template/ RepeatButton:pointerover &gt; Viewbox &gt; Path"> <Style Selector="^ /template/ RepeatButton:pointerover &gt; PathIcon">
<Setter Property="Fill" Value="{DynamicResource ScrollBarButtonArrowForegroundPointerOver}" /> <Setter Property="Foreground" Value="{DynamicResource ScrollBarButtonArrowForegroundPointerOver}" />
</Style> </Style>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="{x:Type Separator}" TargetType="Separator">
<Setter Property="Separator.Background" Value="{DynamicResource MenuItemSeparatorBackground}" />
<Setter Property="Separator.Focusable" Value="False" />
<Setter Property="Separator.Height" Value="{DynamicResource MenuItemSeparatorHeight}" />
<Setter Property="Separator.HorizontalAlignment" Value="Stretch" />
<Setter Property="Separator.Margin" Value="{DynamicResource MenuItemSeparatorMargin}" />
<Setter Property="Separator.Template">
<ControlTemplate TargetType="Separator">
<Border
Height="{TemplateBinding Height}"
Padding="{TemplateBinding Margin}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}" />
</ControlTemplate>
</Setter>
</ControlTheme>
<ControlTheme x:Key="{x:Type MenuItem}" TargetType="MenuItem"> <ControlTheme x:Key="{x:Type MenuItem}" TargetType="MenuItem">
<Setter Property="Background" Value="{DynamicResource MenuFlyoutItemBackground}" /> <Setter Property="Background" Value="{DynamicResource MenuFlyoutItemBackground}" />
<Setter Property="Foreground" Value="{DynamicResource MenuFlyoutItemForeground}" /> <Setter Property="Foreground" Value="{DynamicResource MenuFlyoutItemForeground}" />
@ -160,14 +180,18 @@
PlacementMode="Right" PlacementMode="Right"
WindowManagerAddShadowHint="False"> WindowManagerAddShadowHint="False">
<Border <Border
MinHeight="{DynamicResource MenuFlyoutThemeMinHeight}" MinWidth="{DynamicResource MenuFlyoutMinWidth}"
MaxWidth="{DynamicResource FlyoutThemeMaxWidth}" MinHeight="{DynamicResource MenuFlyoutMinHeight}"
Padding="{DynamicResource MenuFlyoutPresenterThemePadding}" MaxWidth="{DynamicResource MenuFlyoutMaxWidth}"
MaxHeight="{DynamicResource MenuFlyoutMaxHeight}"
Margin="0,4"
Padding="{DynamicResource MenuFlyoutPadding}"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Background="{DynamicResource MenuFlyoutPresenterBackground}" Background="{DynamicResource MenuFlyoutBackground}"
BorderBrush="{DynamicResource MenuFlyoutPresenterBorderBrush}" BorderBrush="{DynamicResource MenuFlyoutBorderBrush}"
BorderThickness="{DynamicResource MenuFlyoutPresenterBorderThemeThickness}" BorderThickness="{DynamicResource MenuFlyoutBorderThickness}"
CornerRadius="{DynamicResource OverlayCornerRadius}"> BoxShadow="{DynamicResource MenuFlyoutBorderBoxShadow}"
CornerRadius="{DynamicResource MenuFlyoutCornerRadius}">
<ScrollViewer Theme="{StaticResource MenuScrollViewer}"> <ScrollViewer Theme="{StaticResource MenuScrollViewer}">
<ItemsPresenter <ItemsPresenter
Name="PART_ItemsPresenter" Name="PART_ItemsPresenter"
@ -249,11 +273,10 @@
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="TopLevelMenuItem" TargetType="MenuItem"> <ControlTheme x:Key="TopLevelMenuItem" TargetType="MenuItem">
<Setter Property="Background" Value="{DynamicResource MenuFlyoutItemBackground}" /> <Setter Property="Background" Value="{DynamicResource MenuItemBackground}" />
<Setter Property="Foreground" Value="{DynamicResource MenuFlyoutItemForeground}" /> <Setter Property="Foreground" Value="{DynamicResource MenuItemForeground}" />
<!-- Narrow padding should be used for mouse input, when non-narrow one should be used for touch input in future. --> <!-- Narrow padding should be used for mouse input, when non-narrow one should be used for touch input in future. -->
<Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" /> <Setter Property="Padding" Value="{DynamicResource MenuItemTopLevelPadding}" />
<Setter Property="Padding" Value="{DynamicResource MenuBarItemPadding}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
<Border <Border
@ -279,15 +302,18 @@
OverlayInputPassThroughElement="{Binding $parent[Menu]}" OverlayInputPassThroughElement="{Binding $parent[Menu]}"
WindowManagerAddShadowHint="False"> WindowManagerAddShadowHint="False">
<Border <Border
MinHeight="{DynamicResource MenuFlyoutThemeMinHeight}" MinWidth="{DynamicResource MenuFlyoutMinWidth}"
MaxWidth="{DynamicResource FlyoutThemeMaxWidth}" MinHeight="{DynamicResource MenuFlyoutMinHeight}"
Padding="{DynamicResource MenuFlyoutPresenterThemePadding}" MaxWidth="{DynamicResource MenuFlyoutMaxWidth}"
MaxHeight="{DynamicResource MenuFlyoutMaxHeight}"
Margin="0,4"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Background="{DynamicResource MenuFlyoutPresenterBackground}" Background="{DynamicResource MenuFlyoutBackground}"
BorderBrush="{DynamicResource MenuFlyoutPresenterBorderBrush}" BorderBrush="{DynamicResource MenuFlyoutBorderBrush}"
BorderThickness="{DynamicResource MenuFlyoutPresenterBorderThemeThickness}" BorderThickness="{DynamicResource MenuFlyoutBorderThickness}"
CornerRadius="{DynamicResource OverlayCornerRadius}"> BoxShadow="{DynamicResource MenuFlyoutBorderBoxShadow}"
<ScrollViewer Theme="{StaticResource MenuScrollViewer}"> CornerRadius="{DynamicResource MenuFlyoutCornerRadius}">
<ScrollViewer Padding="{DynamicResource MenuFlyoutPadding}" Theme="{StaticResource MenuScrollViewer}">
<ItemsPresenter <ItemsPresenter
Name="PART_ItemsPresenter" Name="PART_ItemsPresenter"
Margin="{DynamicResource MenuFlyoutScrollerMargin}" Margin="{DynamicResource MenuFlyoutScrollerMargin}"
@ -305,19 +331,13 @@
<Style Selector="^:selected"> <Style Selector="^:selected">
<Style Selector="^ /template/ Border#PART_LayoutRoot"> <Style Selector="^ /template/ Border#PART_LayoutRoot">
<Setter Property="Background" Value="{DynamicResource MenuFlyoutItemBackgroundPointerOver}" /> <Setter Property="Background" Value="{DynamicResource MenuItemPointeroverBackground}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_HeaderPresenter">
<Setter Property="Foreground" Value="{DynamicResource MenuFlyoutItemForegroundPointerOver}" />
</Style> </Style>
</Style> </Style>
<!-- Listen for PART_LayoutRoot:pointerover, so it will not be triggered when subitem is pressed --> <!-- Listen for PART_LayoutRoot:pointerover, so it will not be triggered when subitem is pressed -->
<Style Selector="^:pressed /template/ Border#PART_LayoutRoot:pointerover"> <Style Selector="^:pressed /template/ Border#PART_LayoutRoot:pointerover">
<Setter Property="Background" Value="{DynamicResource MenuFlyoutItemBackgroundPressed}" /> <Setter Property="Background" Value="{DynamicResource MenuItemPressedBackground}" />
<Style Selector="^ ContentPresenter#PART_HeaderPresenter">
<Setter Property="Foreground" Value="{DynamicResource MenuFlyoutItemForegroundPressed}" />
</Style>
</Style> </Style>
<Style Selector="^:disabled"> <Style Selector="^:disabled">
@ -332,7 +352,6 @@
<ControlTheme x:Key="{x:Type Menu}" TargetType="Menu"> <ControlTheme x:Key="{x:Type Menu}" TargetType="Menu">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Height" Value="60" />
<Setter Property="Menu.ItemContainerTheme" Value="{StaticResource TopLevelMenuItem}" /> <Setter Property="Menu.ItemContainerTheme" Value="{StaticResource TopLevelMenuItem}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="Menu"> <ControlTemplate TargetType="Menu">

View File

@ -1,16 +1,15 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Add Resources Here --> <!-- Add Resources Here -->
<ControlTheme x:Key="{x:Type MenuFlyoutPresenter}" TargetType="MenuFlyoutPresenter"> <ControlTheme x:Key="{x:Type MenuFlyoutPresenter}" TargetType="MenuFlyoutPresenter">
<Setter Property="Background" Value="{DynamicResource MenuFlyoutPresenterBackground}" /> <Setter Property="MenuFlyoutPresenter.Background" Value="{DynamicResource MenuFlyoutBackground}" />
<Setter Property="BorderBrush" Value="{DynamicResource MenuFlyoutPresenterBorderBrush}" /> <Setter Property="MenuFlyoutPresenter.BorderBrush" Value="{DynamicResource MenuFlyoutBorderBrush}" />
<Setter Property="BorderThickness" Value="{DynamicResource MenuFlyoutPresenterBorderThemeThickness}" /> <Setter Property="MenuFlyoutPresenter.BorderThickness" Value="{DynamicResource MenuFlyoutBorderThickness}" />
<Setter Property="Padding" Value="{DynamicResource MenuFlyoutPresenterThemePadding}" /> <Setter Property="MenuFlyoutPresenter.Padding" Value="{DynamicResource MenuFlyoutPadding}" />
<Setter Property="MaxWidth" Value="{DynamicResource FlyoutThemeMaxWidth}" />
<Setter Property="MinHeight" Value="{DynamicResource MenuFlyoutThemeMinHeight}" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="CornerRadius" Value="{DynamicResource OverlayCornerRadius}" /> <Setter Property="MenuFlyoutPresenter.Margin" Value="4" />
<Setter Property="Template"> <Setter Property="MenuFlyoutPresenter.CornerRadius" Value="{DynamicResource OverlayCornerRadius}" />
<Setter Property="MenuFlyoutPresenter.Template">
<ControlTemplate TargetType="MenuFlyoutPresenter"> <ControlTemplate TargetType="MenuFlyoutPresenter">
<Border <Border
Name="LayoutRoot" Name="LayoutRoot"
@ -18,6 +17,7 @@
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" BorderThickness="{TemplateBinding BorderThickness}"
BoxShadow="{DynamicResource MenuFlyoutBorderBoxShadow}"
CornerRadius="{TemplateBinding CornerRadius}"> CornerRadius="{TemplateBinding CornerRadius}">
<ScrollViewer <ScrollViewer
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"

View File

@ -1,3 +1,33 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=System.Runtime">
<!-- Add Resources Here --> <!-- Add Resources Here -->
<PathGeometry x:Key="MenuScrollViewerUpButtonGlyph">M19.637 16.4369C19.0513 17.0227 18.1015 17.0227 17.5157 16.4369L11.8589 10.7801L6.20202 16.4369C5.61623 17.0227 4.66648 17.0227 4.0807 16.4369C3.49491 15.8511 3.49491 14.9014 4.0807 14.3156L10.7982 7.59809C11.384 7.01231 12.3337 7.01231 12.9195 7.59809L19.637 14.3156C20.2228 14.9014 20.2228 15.8511 19.637 16.4369Z</PathGeometry>
<PathGeometry x:Key="MenuScrollViewerDownButtonGlyph">M4.08045 7.59809C4.66624 7.01231 5.61599 7.01231 6.20177 7.59809L11.8586 13.2549L17.5155 7.59809C18.1013 7.01231 19.051 7.01231 19.6368 7.59809C20.2226 8.18388 20.2226 9.13363 19.6368 9.71941L12.9193 16.4369C12.3335 17.0227 11.3838 17.0227 10.798 16.4369L4.08045 9.71941C3.49467 9.13363 3.49467 8.18388 4.08045 7.59809Z</PathGeometry>
<SolidColorBrush x:Key="MenuFlyoutScrollViewerIconForeground" Opacity="0.62" Color="#1C1F23" />
<!-- MenuFlyout -->
<SolidColorBrush x:Key="MenuFlyoutBackground" Color="White" />
<SolidColorBrush x:Key="MenuFlyoutBorderBrush" Opacity="0.08" Color="#1C1F23" />
<Thickness x:Key="MenuFlyoutBorderThickness">1</Thickness>
<Thickness x:Key="MenuFlyoutPadding">8</Thickness>
<BoxShadows x:Key="MenuFlyoutBorderBoxShadow">0 0 8 0 #1A000000</BoxShadows>
<CornerRadius x:Key="MenuFlyoutCornerRadius">3</CornerRadius>
<sys:Double x:Key="MenuFlyoutMinHeight">16</sys:Double>
<sys:Double x:Key="MenuFlyoutMinWidth">100</sys:Double>
<sys:Double x:Key="MenuFlyoutMaxHeight">400</sys:Double>
<sys:Double x:Key="MenuFlyoutMaxWidth">600</sys:Double>
<!-- MenuItem -->
<SolidColorBrush x:Key="MenuItemBackground" Color="Transparent" />
<SolidColorBrush x:Key="MenuItemForeground" Color="#1C1F23" />
<Thickness x:Key="MenuItemTopLevelPadding">8 4</Thickness>
<SolidColorBrush x:Key="MenuItemSeparatorBackground" Opacity="0.08" Color="#1C1F23" />
<sys:Double x:Key="MenuItemSeparatorHeight">1</sys:Double>
<Thickness x:Key="MenuItemSeparatorMargin">2</Thickness>
<SolidColorBrush x:Key="MenuItemPointeroverBackground" Opacity="0.05" Color="#2E3238" />
<SolidColorBrush x:Key="MenuItemPressedBackground" Opacity="0.09" Color="#2E3238" />
</ResourceDictionary> </ResourceDictionary>