5 changed files with 520 additions and 46 deletions
@ -0,0 +1,370 @@ |
|||
<Styles xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
x:CompileBindings="True"> |
|||
<Design.PreviewWith> |
|||
</Design.PreviewWith> |
|||
|
|||
<Styles.Resources> |
|||
<x:Double x:Key="SplitButtonPrimaryButtonSize">32</x:Double> |
|||
<x:Double x:Key="SplitButtonSecondaryButtonSize">32</x:Double> |
|||
</Styles.Resources> |
|||
|
|||
<Style Selector="SplitButton"> |
|||
<Setter Property="Background" Value="{DynamicResource SplitButtonBackground}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForeground}" /> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrush}" /> |
|||
<Setter Property="BorderThickness" Value="{DynamicResource SplitButtonBorderThemeThickness}" /> |
|||
<Setter Property="HorizontalAlignment" Value="Left" /> |
|||
<Setter Property="VerticalAlignment" Value="Center" /> |
|||
<!--<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" /> |
|||
<Setter Property="FontWeight" Value="Normal" /> |
|||
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" /> |
|||
<Setter Property="UseSystemFocusVisuals" Value="True" /> |
|||
<Setter Property="FocusVisualMargin" Value="-3" />--> |
|||
<Setter Property="KeyboardNavigation.IsTabStop" Value="True" /> |
|||
<Setter Property="Padding" Value="{DynamicResource ButtonPadding}" /> |
|||
<Setter Property="CornerRadius" Value="{DynamicResource ControlCornerRadius}" /> |
|||
<Setter Property="Template"> |
|||
<Setter.Value> |
|||
<ControlTemplate> |
|||
<!-- A Border was added here since Avalonia does not support Background/Border/CornerRadius on Grid directly --> |
|||
<!-- ClipToBounds added as a temporary work-around for: https://github.com/AvaloniaUI/Avalonia/issues/2105 --> |
|||
<Border Background="Transparent" |
|||
CornerRadius="{TemplateBinding CornerRadius}" |
|||
ClipToBounds="True"> |
|||
<Border.Styles> |
|||
<!-- Override the style of the inner buttons so that they don't affect background/foreground/border colors --> |
|||
<Style Selector="Button"> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForeground}" /> |
|||
<Setter Property="BorderBrush" Value="Transparent" /> |
|||
<Setter Property="BorderThickness" Value="{DynamicResource SplitButtonBorderThemeThickness}" /> |
|||
<Setter Property="HorizontalAlignment" Value="Left" /> |
|||
<Setter Property="VerticalAlignment" Value="Center" /> |
|||
<!--<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" /> |
|||
<Setter Property="FontWeight" Value="Normal" /> |
|||
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" /> |
|||
<Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}" /> |
|||
<Setter Property="FocusVisualMargin" Value="-3" />--> |
|||
<Setter Property="Template"> |
|||
<ControlTemplate> |
|||
<!-- Switched from Grid to Border to optimize and support Foreground/Background properties --> |
|||
<Border x:Name="RootBorder" |
|||
Background="Transparent"> |
|||
<ContentPresenter x:Name="ContentPresenter" |
|||
BorderBrush="{TemplateBinding BorderBrush}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
Content="{TemplateBinding Content}" |
|||
ContentTemplate="{TemplateBinding ContentTemplate}" |
|||
Padding="{TemplateBinding Padding}" |
|||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" |
|||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" /> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter> |
|||
</Style> |
|||
<Style Selector="Button:disabled"> |
|||
<Setter Property="Background" Value="{DynamicResource SplitButtonBackgroundDisabled}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundDisabled}" /> |
|||
</Style> |
|||
</Border.Styles> |
|||
<Grid> |
|||
|
|||
<Grid.ColumnDefinitions> |
|||
<ColumnDefinition Width="*" |
|||
MinWidth="{DynamicResource SplitButtonPrimaryButtonSize}" /> |
|||
<ColumnDefinition Width="1" /> |
|||
<ColumnDefinition Width="{DynamicResource SplitButtonSecondaryButtonSize}" /> |
|||
</Grid.ColumnDefinitions> |
|||
|
|||
<!-- Changed from Grid to Rectangle since Avalonia does not support Background on Grid directly --> |
|||
<Rectangle x:Name="PrimaryBackgroundRectangle" |
|||
Fill="{TemplateBinding Background}" /> |
|||
|
|||
<Rectangle x:Name="SecondaryBackgroundRectangle" |
|||
Fill="{TemplateBinding Background}" |
|||
Grid.Column="2" /> |
|||
|
|||
<!-- Changed from Grid to Border to support Background/Border/CornerRadius properties --> |
|||
<Border x:Name="Border" |
|||
Grid.ColumnSpan="3" |
|||
BorderBrush="{TemplateBinding BorderBrush}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
CornerRadius="{TemplateBinding CornerRadius}" /> |
|||
|
|||
<Button x:Name="PART_PrimaryButton" |
|||
Grid.Column="0" |
|||
Foreground="{TemplateBinding Foreground}" |
|||
Background="{TemplateBinding Background}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
BorderBrush="Transparent" |
|||
Content="{TemplateBinding Content}" |
|||
ContentTemplate="{TemplateBinding ContentTemplate}" |
|||
Command="{TemplateBinding Command}" |
|||
CommandParameter="{TemplateBinding CommandParameter}" |
|||
FontFamily="{TemplateBinding FontFamily}" |
|||
FontSize="{TemplateBinding FontSize}" |
|||
FontWeight="{TemplateBinding FontWeight}" |
|||
HorizontalAlignment="Stretch" |
|||
VerticalAlignment="Stretch" |
|||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" |
|||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" |
|||
Padding="{TemplateBinding Padding}" |
|||
KeyboardNavigation.IsTabStop="False" /> |
|||
|
|||
<Button x:Name="PART_SecondaryButton" |
|||
Grid.Column="2" |
|||
Foreground="{TemplateBinding Foreground}" |
|||
Background="{TemplateBinding Background}" |
|||
BorderThickness="{TemplateBinding BorderThickness}" |
|||
BorderBrush="Transparent" |
|||
HorizontalContentAlignment="Center" |
|||
VerticalContentAlignment="Center" |
|||
HorizontalAlignment="Stretch" |
|||
VerticalAlignment="Stretch" |
|||
KeyboardNavigation.IsTabStop="False"> |
|||
<Button.Content> |
|||
<!-- TextBlock converted to a Path and placed within Viewbox --> |
|||
<Viewbox UseLayoutRounding="False" |
|||
IsHitTestVisible="False" |
|||
Height="12" |
|||
Width="12"> |
|||
<Path x:Name="DropDownGlyphPath" |
|||
VerticalAlignment="Center" |
|||
HorizontalAlignment="Right" |
|||
Fill="{TemplateBinding Foreground}" |
|||
Data="M1939 486L2029 576L1024 1581L19 576L109 486L1024 1401L1939 486Z" |
|||
Stretch="Uniform" /> |
|||
</Viewbox> |
|||
</Button.Content> |
|||
</Button> |
|||
</Grid> |
|||
</Border> |
|||
</ControlTemplate> |
|||
</Setter.Value> |
|||
</Setter> |
|||
</Style> |
|||
|
|||
<!-- Disabled State --> |
|||
<Style Selector="SplitButton:disabled /template/ Border#Border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushDisabled}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:disabled /template/ Path#DropDownGlyphPath"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonForegroundDisabled}" /> |
|||
</Style> |
|||
|
|||
<!-- FlyoutOpen State --> |
|||
<Style Selector="SplitButton:flyoutOpen /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:flyoutOpen /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:flyoutOpen /template/ Border#Border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:flyoutOpen /template/ Button#PrimaryButton"> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:flyoutOpen /template/ Button#SecondaryButton"> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
|
|||
<!-- TouchPressed State --> |
|||
<Style Selector="SplitButton:touchPressed /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:touchPressed /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:touchPressed /template/ Border#Border"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:touchPressed /template/ Button#PrimaryButton"> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:touchPressed /template/ Button#SecondaryButton"> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
|
|||
<!-- PrimaryPointerOver State --> |
|||
<Style Selector="SplitButton:primaryPointerOver /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPointerOver}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:primaryPointerOver /template/ Button#PrimaryButton"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPointerOver}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPointerOver}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:primaryPointerOver /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackground}" /> |
|||
</Style> |
|||
|
|||
<!-- PrimaryPressed State --> |
|||
<Style Selector="SplitButton:primaryPressed /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:primaryPressed /template/ Button#PrimaryButton"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPressed}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:primaryPressed /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackground}" /> |
|||
</Style> |
|||
|
|||
<!-- SecondaryPointerOver State --> |
|||
<Style Selector="SplitButton:secondaryPointerOver /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackground}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:secondaryPointerOver /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPointerOver}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:secondaryPointerOver /template/ Button#SecondaryButton"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPointerOver}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPointerOver}" /> |
|||
</Style> |
|||
|
|||
<!-- SecondaryPressed State --> |
|||
<Style Selector="SplitButton:secondaryPressed /template/ Rectangle#PrimaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackground}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:secondaryPressed /template/ Rectangle#SecondaryBackgroundRectangle"> |
|||
<Setter Property="Fill" Value="{DynamicResource SplitButtonBackgroundPressed}" /> |
|||
</Style> |
|||
<Style Selector="SplitButton:secondaryPressed /template/ Button#SecondaryButton"> |
|||
<Setter Property="BorderBrush" Value="{DynamicResource SplitButtonBorderBrushPressed}" /> |
|||
<Setter Property="Foreground" Value="{DynamicResource SplitButtonForegroundPressed}" /> |
|||
</Style> |
|||
|
|||
<!-- Checked State --> |
|||
<!--<VisualState x:Name="Checked"> |
|||
<VisualState.Setters> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushChecked}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedFlyoutOpen State --> |
|||
<!--<VisualState x:Name="CheckedFlyoutOpen"> |
|||
<VisualState.Setters> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPressed}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedTouchPressed State --> |
|||
<!--<VisualState x:Name="CheckedTouchPressed"> |
|||
<VisualState.Setters> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPressed}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedPrimaryPointerOver State --> |
|||
<!--<VisualState x:Name="CheckedPrimaryPointerOver"> |
|||
<VisualState.Setters> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushChecked}" /> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPointerOver}" /> |
|||
<Setter Target="PrimaryButton.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPointerOver}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPointerOver}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedPrimaryPressed State --> |
|||
<!--<VisualState x:Name="CheckedPrimaryPressed"> |
|||
<VisualState.Setters> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushChecked}" /> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="PrimaryButton.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPressed}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedSecondaryPointerOver State --> |
|||
<!--<VisualState x:Name="CheckedSecondaryPointerOver"> |
|||
<VisualState.Setters> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushChecked}" /> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPointerOver}" /> |
|||
<Setter Target="SecondaryButton.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPointerOver}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPointerOver}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!-- CheckedSecondaryPressed State --> |
|||
<!--<VisualState x:Name="CheckedSecondaryPressed"> |
|||
<VisualState.Setters> |
|||
<Setter Target="Border.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushChecked}" /> |
|||
<Setter Target="PrimaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundChecked}" /> |
|||
<Setter Target="PrimaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundChecked}" /> |
|||
<Setter Target="SecondaryBackgroundRectangle.Fill" |
|||
Value="{DynamicResource SplitButtonBackgroundCheckedPressed}" /> |
|||
<Setter Target="SecondaryButton.BorderBrush" |
|||
Value="{DynamicResource SplitButtonBorderBrushCheckedPressed}" /> |
|||
<Setter Target="SecondaryButton.Foreground" |
|||
Value="{DynamicResource SplitButtonForegroundCheckedPressed}" /> |
|||
</VisualState.Setters> |
|||
</VisualState>--> |
|||
|
|||
<!--VisualStateGroup x:Name="SecondaryButtonPlacementStates"> |
|||
<VisualState x:Name="SecondaryButtonRight" /> |
|||
|
|||
<VisualState x:Name="SecondaryButtonSpan"> |
|||
<VisualState.Setters> |
|||
<Setter Target="SecondaryButton.(Grid.Column)" |
|||
Value="0" /> |
|||
<Setter Target="SecondaryButton.(Grid.ColumnSpan)" |
|||
Value="3" /> |
|||
</VisualState.Setters> |
|||
</VisualState> |
|||
</VisualStateGroup--> |
|||
|
|||
</Styles> |
|||
Loading…
Reference in new issue