adjust CornerRadius & MinWidth for SplitButton (#725)

* feat: support CornerRadius for SplitButton.

* Update src/Semi.Avalonia/Controls/SplitButton.axaml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* feat: refactor SplitButton layout to use Grid for better structure.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Zhang Dian
2026-02-07 16:51:27 +08:00
committed by GitHub
parent f46bd16904
commit 0f63bc68bc

View File

@@ -1,10 +1,13 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:iri="https://irihi.tech/shared">
<Design.PreviewWith> <Design.PreviewWith>
<StackPanel Width="500" Height="500" Margin="20" Spacing="8"> <StackPanel Width="500" Height="500" Margin="20" Spacing="8">
<SplitButton <SplitButton
Theme="{DynamicResource SolidSplitButton}" Theme="{DynamicResource OutlineSplitButton}"
Classes="Danger"
CornerRadius="12"
Content="Hello" /> Content="Hello" />
<ToggleSplitButton <ToggleSplitButton
IsChecked="True" IsChecked="True"
@@ -73,47 +76,40 @@
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="SplitButton"> <ControlTemplate TargetType="SplitButton">
<Border <Grid
BackgroundSizing="OuterBorderEdge" ColumnDefinitions="*,Auto"
ClipToBounds="True" ColumnSpacing="{DynamicResource SplitButtonSeparatorWidth}">
CornerRadius="{TemplateBinding CornerRadius}"> <Button
<DockPanel> Name="PART_PrimaryButton"
<Button Grid.Column="0"
Name="PART_SecondaryButton" Padding="{TemplateBinding Padding}"
Padding="4,0" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
BorderThickness="{TemplateBinding BorderThickness}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
CornerRadius="0" BorderThickness="{TemplateBinding BorderThickness}"
DockPanel.Dock="Right" Command="{TemplateBinding Command}"
Theme="{DynamicResource SemiSplitButtonElement}"> CommandParameter="{TemplateBinding CommandParameter}"
<PathIcon Content="{TemplateBinding Content}"
Theme="{DynamicResource InnerPathIcon}" ContentTemplate="{TemplateBinding ContentTemplate}"
Data="{DynamicResource SplitButtonIconGlyph}" CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Left}}"
Foreground="{Binding $parent[Button].Foreground}" /> FontFamily="{TemplateBinding FontFamily}"
</Button> FontSize="{TemplateBinding FontSize}"
<Rectangle FontWeight="{TemplateBinding FontWeight}"
Name="SeparatorBorder" Theme="{DynamicResource SemiSplitButtonElement}" />
Width="{DynamicResource SplitButtonSeparatorWidth}" <Button
VerticalAlignment="Stretch" Name="PART_SecondaryButton"
DockPanel.Dock="Right" Grid.Column="1"
Fill="Transparent" Padding="0"
StrokeThickness="0" /> MinHeight="{TemplateBinding MinHeight}"
<Button MinWidth="{Binding $self.MinHeight}"
Name="PART_PrimaryButton" BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}" CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Right}}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Theme="{DynamicResource SemiSplitButtonElement}">
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" <PathIcon
BorderThickness="{TemplateBinding BorderThickness}" Theme="{DynamicResource InnerPathIcon}"
Command="{TemplateBinding Command}" Data="{DynamicResource SplitButtonIconGlyph}"
CommandParameter="{TemplateBinding CommandParameter}" Foreground="{Binding $parent[Button].Foreground}" />
Content="{TemplateBinding Content}" </Button>
ContentTemplate="{TemplateBinding ContentTemplate}" </Grid>
CornerRadius="0"
FontFamily="{TemplateBinding FontFamily}"
FontSize="{TemplateBinding FontSize}"
FontWeight="{TemplateBinding FontWeight}"
Theme="{DynamicResource SemiSplitButtonElement}" />
</DockPanel>
</Border>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>