feat: Add DropDownButton styles and demos.

This commit is contained in:
NaBian committed 2026-06-14 15:50:00 +08:00
1 parent fffb4d9902
commit 4d5f453895
7 files changed
+1038 -114

No files matched your search

@@ -7,6 +7,7 @@
[ "Brush", "BrushDemo", "Brush.Brush", "", "" ],
[ "Button", "ButtonDemo", "Brush.ButtonClick", "", "" ],
[ "SplitButton", "SplitButtonDemo", "Brush.ButtonClick", "", "" ],
[ "DropDownButton", "DropDownButtonDemo", "Brush.ButtonClick", "", "" ],
[ "RepeatButton", "RepeatButtonDemo", "Brush.RepeatButton", "", "" ],
[ "ToggleButton", "ToggleButtonDemo", "Brush.Toggle", "", "" ],
[ "ToggleSwitch", "ToggleSwitchDemo", "Brush.Toggle", "", "" ],
@@ -0,0 +1,249 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
x:Class="HandyControlDemo.UserControl.DropDownButtonDemo"
Background="{DynamicResource RegionBrush}">
<ScrollViewer>
<hc:UniformSpacingPanel ChildWrapping="Wrap"
Spacing="32"
Margin="32">
<hc:UniformSpacingPanel Orientation="Vertical"
Spacing="32">
<WrapPanel>
<StackPanel>
<DropDownButton Content="Default"
Margin="5">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Default"
Margin="5" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Primary"
Margin="5"
Theme="{StaticResource DropDownButtonPrimary}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Primary"
Margin="5"
Theme="{StaticResource DropDownButtonPrimary}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Success"
Margin="5"
Theme="{StaticResource DropDownButtonSuccess}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Success"
Margin="5"
Theme="{StaticResource DropDownButtonSuccess}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Info"
Margin="5"
Theme="{StaticResource DropDownButtonInfo}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Info"
Margin="5"
Theme="{StaticResource DropDownButtonInfo}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Warning"
Margin="5"
Theme="{StaticResource DropDownButtonWarning}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Warning"
Margin="5"
Theme="{StaticResource DropDownButtonWarning}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Danger"
Margin="5"
Theme="{StaticResource DropDownButtonDanger}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Danger"
Margin="5"
Theme="{StaticResource DropDownButtonDanger}" />
</StackPanel>
</WrapPanel>
<WrapPanel>
<StackPanel>
<DropDownButton Content="Calendar"
Margin="5"
hc:IconElement.Geometry="{StaticResource CalendarGeometry}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Today" />
<MenuItem Header="Tomorrow" />
<MenuItem Header="Next Week" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
</StackPanel>
<StackPanel>
<DropDownButton Content="Calendar"
Margin="5"
Theme="{StaticResource DropDownButtonPrimary}"
hc:IconElement.Geometry="{StaticResource CalendarGeometry}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Today" />
<MenuItem Header="Tomorrow" />
<MenuItem Header="Next Week" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
</StackPanel>
</WrapPanel>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Orientation="Vertical"
Spacing="32">
<WrapPanel>
<StackPanel>
<DropDownButton Content="Default"
Margin="5"
Theme="{StaticResource DropDownButton.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Default"
Margin="5"
Theme="{StaticResource DropDownButton.Small}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Primary"
Margin="5"
Theme="{StaticResource DropDownButtonPrimary.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Primary"
Margin="5"
Theme="{StaticResource DropDownButtonPrimary.Small}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Success"
Margin="5"
Theme="{StaticResource DropDownButtonSuccess.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Success"
Margin="5"
Theme="{StaticResource DropDownButtonSuccess.Small}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Info"
Margin="5"
Theme="{StaticResource DropDownButtonInfo.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Info"
Margin="5"
Theme="{StaticResource DropDownButtonInfo.Small}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Warning"
Margin="5"
Theme="{StaticResource DropDownButtonWarning.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Warning"
Margin="5"
Theme="{StaticResource DropDownButtonWarning.Small}" />
</StackPanel>
<StackPanel>
<DropDownButton Content="Danger"
Margin="5"
Theme="{StaticResource DropDownButtonDanger.Small}">
<DropDownButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton IsEnabled="False"
Content="Danger"
Margin="5"
Theme="{StaticResource DropDownButtonDanger.Small}" />
</StackPanel>
</WrapPanel>
</hc:UniformSpacingPanel>
</hc:UniformSpacingPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,9 @@
namespace HandyControlDemo.UserControl;
public partial class DropDownButtonDemo : Avalonia.Controls.UserControl
{
public DropDownButtonDemo()
{
InitializeComponent();
}
}
@@ -8,116 +8,401 @@
Spacing="32"
Margin="32">
<hc:UniformSpacingPanel Orientation="Vertical"
Spacing="16">
<TextBlock Text="SplitButton (Default)"
Theme="{StaticResource TextBlockSubTitleBold}" />
Spacing="32">
<WrapPanel>
<SplitButton Content="Default"
Margin="5">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton Content="Disabled"
IsEnabled="False"
Margin="5" />
<SplitButton Content="Calendar"
Margin="5"
hc:IconElement.Geometry="{StaticResource CalendarGeometry}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Today" />
<MenuItem Header="Tomorrow" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<StackPanel>
<SplitButton Content="Default"
Margin="5">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Default"
Margin="5" />
</StackPanel>
<StackPanel>
<SplitButton Content="Primary"
Margin="5"
Theme="{StaticResource SplitButtonPrimary}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Primary"
Margin="5"
Theme="{StaticResource SplitButtonPrimary}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Success"
Margin="5"
Theme="{StaticResource SplitButtonSuccess}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Success"
Margin="5"
Theme="{StaticResource SplitButtonSuccess}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Info"
Margin="5"
Theme="{StaticResource SplitButtonInfo}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Info"
Margin="5"
Theme="{StaticResource SplitButtonInfo}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Warning"
Margin="5"
Theme="{StaticResource SplitButtonWarning}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Warning"
Margin="5"
Theme="{StaticResource SplitButtonWarning}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Danger"
Margin="5"
Theme="{StaticResource SplitButtonDanger}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
<MenuItem Header="Item 3" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Danger"
Margin="5"
Theme="{StaticResource SplitButtonDanger}" />
</StackPanel>
</WrapPanel>
<TextBlock Text="SplitButton.Small"
Theme="{StaticResource TextBlockSubTitleBold}" />
<WrapPanel>
<SplitButton Content="Default"
Margin="5"
Theme="{StaticResource SplitButton.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton Content="Disabled"
IsEnabled="False"
Margin="5"
Theme="{StaticResource SplitButton.Small}" />
<SplitButton Content="Clock"
Margin="5"
hc:IconElement.Geometry="{StaticResource ClockGeometry}"
Theme="{StaticResource SplitButton.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Now" />
<MenuItem Header="Later" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<StackPanel>
<SplitButton Content="Calendar"
Margin="5"
hc:IconElement.Geometry="{StaticResource CalendarGeometry}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Today" />
<MenuItem Header="Tomorrow" />
<MenuItem Header="Next Week" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
</StackPanel>
<StackPanel>
<SplitButton Content="Calendar"
Margin="5"
Theme="{StaticResource SplitButtonPrimary}"
hc:IconElement.Geometry="{StaticResource CalendarGeometry}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Today" />
<MenuItem Header="Tomorrow" />
<MenuItem Header="Next Week" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
</StackPanel>
</WrapPanel>
<WrapPanel>
<StackPanel>
<ToggleSplitButton Content="Default"
Margin="5"
IsChecked="True">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Primary"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonPrimary}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Success"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonSuccess}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Info"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonInfo}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Warning"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonWarning}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Danger"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonDanger}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
</WrapPanel>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Orientation="Vertical"
Spacing="16">
<TextBlock Text="ToggleSplitButton"
Theme="{StaticResource TextBlockSubTitleBold}" />
Spacing="32">
<WrapPanel>
<ToggleSplitButton Content="Toggle"
Margin="5">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
<ToggleSplitButton Content="Checked"
IsChecked="True"
Margin="5">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
<ToggleSplitButton Content="Disabled"
IsEnabled="False"
Margin="5" />
<StackPanel>
<SplitButton Content="Default"
Margin="5"
Theme="{StaticResource SplitButton.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Default"
Margin="5"
Theme="{StaticResource SplitButton.Small}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Primary"
Margin="5"
Theme="{StaticResource SplitButtonPrimary.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Primary"
Margin="5"
Theme="{StaticResource SplitButtonPrimary.Small}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Success"
Margin="5"
Theme="{StaticResource SplitButtonSuccess.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Success"
Margin="5"
Theme="{StaticResource SplitButtonSuccess.Small}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Info"
Margin="5"
Theme="{StaticResource SplitButtonInfo.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Info"
Margin="5"
Theme="{StaticResource SplitButtonInfo.Small}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Warning"
Margin="5"
Theme="{StaticResource SplitButtonWarning.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Warning"
Margin="5"
Theme="{StaticResource SplitButtonWarning.Small}" />
</StackPanel>
<StackPanel>
<SplitButton Content="Danger"
Margin="5"
Theme="{StaticResource SplitButtonDanger.Small}">
<SplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Item 1" />
<MenuItem Header="Item 2" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton IsEnabled="False"
Content="Danger"
Margin="5"
Theme="{StaticResource SplitButtonDanger.Small}" />
</StackPanel>
</WrapPanel>
<TextBlock Text="ToggleSplitButton.Small"
Theme="{StaticResource TextBlockSubTitleBold}" />
<WrapPanel>
<ToggleSplitButton Content="Toggle"
Margin="5"
Theme="{StaticResource ToggleSplitButton.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
<ToggleSplitButton Content="Checked"
IsChecked="True"
Margin="5"
Theme="{StaticResource ToggleSplitButton.Small}" />
<ToggleSplitButton Content="Disabled"
IsEnabled="False"
Margin="5"
Theme="{StaticResource ToggleSplitButton.Small}" />
<StackPanel>
<ToggleSplitButton Content="Default"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButton.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Primary"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonPrimary.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Success"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonSuccess.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Info"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonInfo.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Warning"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonWarning.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
<StackPanel>
<ToggleSplitButton Content="Danger"
Margin="5"
IsChecked="True"
Theme="{StaticResource ToggleSplitButtonDanger.Small}">
<ToggleSplitButton.Flyout>
<MenuFlyout>
<MenuItem Header="Option A" />
<MenuItem Header="Option B" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
</StackPanel>
</WrapPanel>
</hc:UniformSpacingPanel>
</hc:UniformSpacingPanel>
@@ -0,0 +1,239 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:ClassModifier="internal"
xmlns:hc="clr-namespace:HandyControl.Controls">
<ControlTheme x:Key="DropDownButtonBaseStyle"
TargetType="DropDownButton">
<Setter Property="Height"
Value="{StaticResource DefaultControlHeight}" />
<Setter Property="Padding"
Value="{StaticResource DefaultControlPadding}" />
<Setter Property="HorizontalAlignment"
Value="Left" />
<Setter Property="VerticalAlignment"
Value="Center" />
<Setter Property="HorizontalContentAlignment"
Value="Center" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="Background"
Value="{DynamicResource RegionBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource PrimaryTextBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource BorderBrush}" />
<Setter Property="BorderThickness"
Value="1" />
<Setter Property="hc:BorderElement.CornerRadius"
Value="{StaticResource DefaultCornerRadius}" />
<Setter Property="CornerRadius"
Value="{Binding $self.(hc:BorderElement.CornerRadius)}" />
<Setter Property="Template">
<ControlTemplate>
<Panel>
<Border Background="{TemplateBinding Background}"
CornerRadius="{TemplateBinding CornerRadius}" />
<Border x:Name="RootBorder"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
CornerRadius="{TemplateBinding CornerRadius}">
<Grid ColumnDefinitions="*,Auto"
Margin="{TemplateBinding Padding}">
<StackPanel Grid.Column="0"
Orientation="Horizontal"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<Path Width="{TemplateBinding hc:IconElement.Width}"
Height="{TemplateBinding hc:IconElement.Height}"
Fill="{TemplateBinding Foreground}"
IsVisible="{Binding Path=(hc:IconElement.Geometry), RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static ObjectConverters.IsNotNull}}"
Stretch="Uniform"
Data="{TemplateBinding hc:IconElement.Geometry}" />
<ContentPresenter x:Name="PART_ContentPresenter"
RecognizesAccessKey="True"
VerticalAlignment="Center"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
IsVisible="{Binding $self.Content, Converter={x:Static ObjectConverters.IsNotNull}}"
Margin="{Binding Path=(hc:IconElement.Geometry), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource GeometrySpacingConverter}, ConverterParameter='6,0,0,0'}" />
</StackPanel>
<Path Grid.Column="1"
Width="8"
Height="5"
Margin="8,0,0,0"
Stretch="Uniform"
VerticalAlignment="Center"
Fill="{TemplateBinding Foreground}"
IsHitTestVisible="False"
Data="M1939 486L2029 576L1024 1581L19 576L109 486L1024 1401L1939 486Z" />
</Grid>
</Border>
</Panel>
</ControlTemplate>
</Setter>
<Style Selector="^:pointerover">
<Setter Property="Opacity"
Value="0.9" />
</Style>
<Style Selector="^:pressed">
<Setter Property="Opacity"
Value="0.6" />
</Style>
<Style Selector="^:flyout-open">
<Setter Property="Opacity"
Value="0.6" />
</Style>
<Style Selector="^:disabled">
<Setter Property="Opacity"
Value="0.4" />
</Style>
</ControlTheme>
<ControlTheme x:Key="{x:Type DropDownButton}"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Foreground"
Value="{DynamicResource PrimaryTextBrush}" />
<Style Selector="^:pointerover">
<Setter Property="Background"
Value="{DynamicResource SecondaryRegionBrush}" />
</Style>
<Style Selector="^:pressed">
<Setter Property="Background"
Value="{DynamicResource BorderBrush}" />
</Style>
<Style Selector="^:flyout-open">
<Setter Property="Background"
Value="{DynamicResource BorderBrush}" />
</Style>
</ControlTheme>
<ControlTheme x:Key="DropDownButton.Small"
BasedOn="{StaticResource {x:Type DropDownButton}}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonPrimary"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Background"
Value="{DynamicResource PrimaryBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonPrimary.Small"
BasedOn="{StaticResource DropDownButtonPrimary}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonSuccess"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Background"
Value="{DynamicResource SuccessBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource SuccessBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonSuccess.Small"
BasedOn="{StaticResource DropDownButtonSuccess}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonInfo"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Background"
Value="{DynamicResource InfoBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource InfoBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonInfo.Small"
BasedOn="{StaticResource DropDownButtonInfo}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonWarning"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Background"
Value="{DynamicResource WarningBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource WarningBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonWarning.Small"
BasedOn="{StaticResource DropDownButtonWarning}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonDanger"
BasedOn="{StaticResource DropDownButtonBaseStyle}"
TargetType="DropDownButton">
<Setter Property="Background"
Value="{DynamicResource DangerBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource DangerBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="DropDownButtonDanger.Small"
BasedOn="{StaticResource DropDownButtonDanger}"
TargetType="DropDownButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
</ResourceDictionary>
@@ -33,6 +33,7 @@
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/Window.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/Button.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/SplitButton.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/DropDownButton.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/HyperlinkButton.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/RepeatButton.axaml" />
<MergeResourceInclude Source="avares://HandyControl/Themes/Styles/ToggleButton.axaml" />
@@ -40,28 +40,18 @@
</Setter>
<Style Selector="^:pointerover /template/ Border#border">
<Setter Property="Background"
Value="{DynamicResource SecondaryRegionBrush}" />
<Setter Property="Opacity"
Value="0.9" />
</Style>
<Style Selector="^:pressed /template/ Border#border">
<Setter Property="Background"
Value="{DynamicResource BorderBrush}" />
<Setter Property="Opacity"
Value="0.6" />
</Style>
<Style Selector="^[Tag=flyout-open] /template/ Border#border">
<Setter Property="Background"
Value="{DynamicResource BorderBrush}" />
</Style>
<Style Selector="^[Tag=checked] /template/ Border#border">
<Setter Property="Background"
Value="{DynamicResource PrimaryBrush}" />
</Style>
<Style Selector="^[Tag=checked]">
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
<Setter Property="Opacity"
Value="0.6" />
</Style>
</ControlTheme>
@@ -196,6 +186,116 @@
Value="12" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonPrimary"
BasedOn="{StaticResource SplitButtonBaseStyle}"
TargetType="SplitButton">
<Setter Property="Background"
Value="{DynamicResource PrimaryBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonPrimary.Small"
BasedOn="{StaticResource SplitButtonPrimary}"
TargetType="SplitButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonSuccess"
BasedOn="{StaticResource SplitButtonBaseStyle}"
TargetType="SplitButton">
<Setter Property="Background"
Value="{DynamicResource SuccessBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource SuccessBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonSuccess.Small"
BasedOn="{StaticResource SplitButtonSuccess}"
TargetType="SplitButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonInfo"
BasedOn="{StaticResource SplitButtonBaseStyle}"
TargetType="SplitButton">
<Setter Property="Background"
Value="{DynamicResource InfoBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource InfoBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonInfo.Small"
BasedOn="{StaticResource SplitButtonInfo}"
TargetType="SplitButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonWarning"
BasedOn="{StaticResource SplitButtonBaseStyle}"
TargetType="SplitButton">
<Setter Property="Background"
Value="{DynamicResource WarningBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource WarningBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonWarning.Small"
BasedOn="{StaticResource SplitButtonWarning}"
TargetType="SplitButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonDanger"
BasedOn="{StaticResource SplitButtonBaseStyle}"
TargetType="SplitButton">
<Setter Property="Background"
Value="{DynamicResource DangerBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource DangerBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</ControlTheme>
<ControlTheme x:Key="SplitButtonDanger.Small"
BasedOn="{StaticResource SplitButtonDanger}"
TargetType="SplitButton">
<Setter Property="Height"
Value="20" />
<Setter Property="Padding"
Value="6,1" />
<Setter Property="hc:IconElement.Height"
Value="12" />
</ControlTheme>
<!-- ToggleSplitButton uses StyleKeyOverride => typeof(SplitButton), so it inherits the
SplitButton default theme automatically. The :checked dark mask is defined in
SplitButtonBaseStyle and only triggers when InternalIsChecked == true (i.e. on
@@ -204,4 +304,44 @@
<ControlTheme x:Key="ToggleSplitButton.Small"
BasedOn="{StaticResource SplitButton.Small}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonPrimary"
BasedOn="{StaticResource SplitButtonPrimary}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonPrimary.Small"
BasedOn="{StaticResource SplitButtonPrimary.Small}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonSuccess"
BasedOn="{StaticResource SplitButtonSuccess}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonSuccess.Small"
BasedOn="{StaticResource SplitButtonSuccess.Small}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonInfo"
BasedOn="{StaticResource SplitButtonInfo}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonInfo.Small"
BasedOn="{StaticResource SplitButtonInfo.Small}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonWarning"
BasedOn="{StaticResource SplitButtonWarning}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonWarning.Small"
BasedOn="{StaticResource SplitButtonWarning.Small}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonDanger"
BasedOn="{StaticResource SplitButtonDanger}"
TargetType="ToggleSplitButton" />
<ControlTheme x:Key="ToggleSplitButtonDanger.Small"
BasedOn="{StaticResource SplitButtonDanger.Small}"
TargetType="ToggleSplitButton" />
</ResourceDictionary>