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,32 +76,12 @@
<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}">
<DockPanel>
<Button
Name="PART_SecondaryButton"
Padding="4,0"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="0"
DockPanel.Dock="Right"
Theme="{DynamicResource SemiSplitButtonElement}">
<PathIcon
Theme="{DynamicResource InnerPathIcon}"
Data="{DynamicResource SplitButtonIconGlyph}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<Rectangle
Name="SeparatorBorder"
Width="{DynamicResource SplitButtonSeparatorWidth}"
VerticalAlignment="Stretch"
DockPanel.Dock="Right"
Fill="Transparent"
StrokeThickness="0" />
<Button <Button
Name="PART_PrimaryButton" Name="PART_PrimaryButton"
Grid.Column="0"
Padding="{TemplateBinding Padding}" Padding="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
@@ -107,13 +90,26 @@
CommandParameter="{TemplateBinding CommandParameter}" CommandParameter="{TemplateBinding CommandParameter}"
Content="{TemplateBinding Content}" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplate="{TemplateBinding ContentTemplate}"
CornerRadius="0" CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Left}}"
FontFamily="{TemplateBinding FontFamily}" FontFamily="{TemplateBinding FontFamily}"
FontSize="{TemplateBinding FontSize}" FontSize="{TemplateBinding FontSize}"
FontWeight="{TemplateBinding FontWeight}" FontWeight="{TemplateBinding FontWeight}"
Theme="{DynamicResource SemiSplitButtonElement}" /> Theme="{DynamicResource SemiSplitButtonElement}" />
</DockPanel> <Button
</Border> Name="PART_SecondaryButton"
Grid.Column="1"
Padding="0"
MinHeight="{TemplateBinding MinHeight}"
MinWidth="{Binding $self.MinHeight}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Right}}"
Theme="{DynamicResource SemiSplitButtonElement}">
<PathIcon
Theme="{DynamicResource InnerPathIcon}"
Data="{DynamicResource SplitButtonIconGlyph}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
</Grid>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>