mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-03-03 00:00:55 +08:00
396 lines
22 KiB
XML
396 lines
22 KiB
XML
<ResourceDictionary
|
|
xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
x:CompileBindings="True">
|
|
<Design.PreviewWith>
|
|
<StackPanel Margin="20">
|
|
<ToggleSwitch
|
|
Content="Content"
|
|
OffContent="OffContent"
|
|
OnContent="OnContent" />
|
|
</StackPanel>
|
|
</Design.PreviewWith>
|
|
<ControlTheme x:Key="{x:Type ToggleSwitch}" TargetType="ToggleSwitch">
|
|
<Setter Property="HorizontalAlignment" Value="Left" />
|
|
<Setter Property="VerticalAlignment" Value="Center" />
|
|
<Setter Property="HorizontalContentAlignment" Value="Left" />
|
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
|
<Setter Property="FocusAdorner">
|
|
<FocusAdornerTemplate>
|
|
<Border BorderThickness="{DynamicResource AdornerLayerBorderThickness}"
|
|
BorderBrush="{DynamicResource AdornerLayerStroke}"
|
|
CornerRadius="100"/>
|
|
</FocusAdornerTemplate>
|
|
</Setter>
|
|
<Setter Property="KnobTransitions">
|
|
<Transitions>
|
|
<DoubleTransition
|
|
Easing="CubicEaseOut"
|
|
Property="Canvas.Left"
|
|
Duration="0:0:0.2" />
|
|
</Transitions>
|
|
</Setter>
|
|
<Setter Property="Template">
|
|
<ControlTemplate TargetType="ToggleSwitch">
|
|
<Grid
|
|
Background="{TemplateBinding Background}"
|
|
Cursor="Hand"
|
|
RowDefinitions="Auto,*"
|
|
ColumnDefinitions="Auto, *">
|
|
<ContentPresenter
|
|
x:Name="PART_ContentPresenter"
|
|
Grid.Row="0" Grid.Column="0"
|
|
Grid.ColumnSpan="2"
|
|
Margin="{DynamicResource ToggleSwitchHeaderMargin}"
|
|
VerticalAlignment="Top"
|
|
Content="{TemplateBinding Content}"
|
|
ContentTemplate="{TemplateBinding ContentTemplate}"
|
|
IsVisible="{TemplateBinding Content, Converter={x:Static ObjectConverters.IsNotNull}}"
|
|
RecognizesAccessKey="True" />
|
|
|
|
<Border
|
|
x:Name="SwitchBackgroundBorder"
|
|
Grid.Row="1" Grid.Column="0"
|
|
TemplatedControl.IsTemplateFocusTarget="True"
|
|
Width="{DynamicResource ToggleSwitchDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchDefaultHeight}"
|
|
BorderBrush="{DynamicResource ToggleSwitchDefaultBorderBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="100">
|
|
<Border.Transitions>
|
|
<Transitions>
|
|
<BrushTransition Property="Background" Duration="0:0:0.2" />
|
|
</Transitions>
|
|
</Border.Transitions>
|
|
<Canvas
|
|
x:Name="PART_SwitchKnob"
|
|
Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
HorizontalAlignment="Left">
|
|
<Grid
|
|
x:Name="PART_MovingKnobs"
|
|
Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Margin="{DynamicResource ToggleSwitchIndicatorDefaultMargin}">
|
|
<Border
|
|
x:Name="SwitchKnobIndicator"
|
|
Background="White"
|
|
BoxShadow="0 0 1 1 #222E3238"
|
|
CornerRadius="100" />
|
|
<Arc
|
|
x:Name="SwitchKnobLoadingIndicator"
|
|
IsVisible="False"
|
|
StrokeThickness="2"
|
|
StartAngle="0"
|
|
SweepAngle="140"
|
|
StrokeJoin="Round"
|
|
StrokeLineCap="Round">
|
|
<Arc.Stroke>
|
|
<ConicGradientBrush>
|
|
<GradientStops>
|
|
<GradientStop Offset="0.1" Color="Transparent" />
|
|
<GradientStop Offset="0.7" Color="White" />
|
|
</GradientStops>
|
|
</ConicGradientBrush>
|
|
</Arc.Stroke>
|
|
<Arc.Styles>
|
|
<Style Selector="Arc[IsVisible=True]">
|
|
<Style.Animations>
|
|
<Animation IterationCount="Infinite" Duration="0:0:0.6">
|
|
<KeyFrame Cue="0%">
|
|
<Setter Property="RotateTransform.Angle" Value="0.0" />
|
|
</KeyFrame>
|
|
<KeyFrame Cue="100%">
|
|
<Setter Property="RotateTransform.Angle" Value="360.0" />
|
|
</KeyFrame>
|
|
</Animation>
|
|
</Style.Animations>
|
|
</Style>
|
|
</Arc.Styles>
|
|
</Arc>
|
|
</Grid>
|
|
</Canvas>
|
|
</Border>
|
|
|
|
<ContentPresenter
|
|
x:Name="PART_OnContentPresenter"
|
|
Grid.Row="1" Grid.Column="1"
|
|
Margin="{DynamicResource ToggleSwitchOnContentMargin}"
|
|
HorizontalAlignment="Left"
|
|
VerticalAlignment="Center"
|
|
VerticalContentAlignment="Center"
|
|
Content="{TemplateBinding OnContent}"
|
|
ContentTemplate="{TemplateBinding OnContentTemplate}" />
|
|
<ContentPresenter
|
|
x:Name="PART_OffContentPresenter"
|
|
Grid.Row="1" Grid.Column="1"
|
|
Margin="{DynamicResource ToggleSwitchOnContentMargin}"
|
|
HorizontalAlignment="Left"
|
|
VerticalAlignment="Center"
|
|
VerticalContentAlignment="Center"
|
|
Content="{TemplateBinding OffContent}"
|
|
ContentTemplate="{TemplateBinding OffContentTemplate}" />
|
|
</Grid>
|
|
</ControlTemplate>
|
|
</Setter>
|
|
|
|
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter:empty">
|
|
<Setter Property="Margin" Value="0" />
|
|
</Style>
|
|
|
|
<Style Selector="^:unchecked">
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
|
|
<Setter Property="IsVisible" Value="False" />
|
|
</Style>
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
|
|
<Setter Property="IsVisible" Value="True" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedDefaultBackground}" />
|
|
</Style>
|
|
<Style Selector="^:pointerover /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPointeroverBackground}" />
|
|
</Style>
|
|
<Style Selector="^:pressed /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPressedBackground}" />
|
|
</Style>
|
|
<Style Selector="^:disabled /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedDisabledBackground}" />
|
|
<Setter Property="BorderBrush" Value="{DynamicResource ToggleSwitchContainerUnCheckedDisabledBorderBrush}" />
|
|
<Setter Property="BorderThickness" Value="1" />
|
|
</Style>
|
|
</Style>
|
|
|
|
<Style Selector="^:checked">
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
|
|
<Setter Property="IsVisible" Value="True" />
|
|
</Style>
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
|
|
<Setter Property="IsVisible" Value="False" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedDefaultBackground}" />
|
|
</Style>
|
|
<Style Selector="^:pointerover /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPointeroverBackground}" />
|
|
</Style>
|
|
<Style Selector="^:pressed /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPressedBackground}" />
|
|
</Style>
|
|
<Style Selector="^:disabled /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedDisabledBackground}" />
|
|
</Style>
|
|
</Style>
|
|
|
|
<Style Selector="^.Loading">
|
|
<Style Selector="^ /template/ Border#SwitchKnobIndicator">
|
|
<Setter Property="IsVisible" Value="False" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
|
|
<Setter Property="IsVisible" Value="True" />
|
|
</Style>
|
|
<Style Selector="^:unchecked /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPointeroverBackground}" />
|
|
</Style>
|
|
<Style Selector="^:checked /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPointeroverBackground}" />
|
|
</Style>
|
|
</Style>
|
|
|
|
<Style Selector="^.Small">
|
|
<Style Selector="^ /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchSmallWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchSmallHeight}" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Canvas#PART_SwitchKnob">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Grid#PART_MovingKnobs">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
|
|
<Setter Property="Margin" Value="{DynamicResource ToggleSwitchIndicatorSmallMargin}"/>
|
|
</Style>
|
|
<Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
|
|
<Setter Property="StrokeThickness" Value="{DynamicResource ToggleSwitchLoadingIndicatorSmallStrokeThickness}" />
|
|
</Style>
|
|
</Style>
|
|
<Style Selector="^.Large">
|
|
<Style Selector="^ /template/ Border#SwitchBackgroundBorder">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchLargeWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchLargeHeight}" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Canvas#PART_SwitchKnob">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
|
|
</Style>
|
|
<Style Selector="^ /template/ Grid#PART_MovingKnobs">
|
|
<Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
|
|
<Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
|
|
<Setter Property="Margin" Value="{DynamicResource ToggleSwitchIndicatorLargeMargin}"/>
|
|
</Style>
|
|
<Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
|
|
<Setter Property="StrokeThickness" Value="{DynamicResource ToggleSwitchLoadingIndicatorLargeStrokeThickness}" />
|
|
</Style>
|
|
</Style>
|
|
</ControlTheme>
|
|
|
|
<ControlTheme
|
|
x:Key="ButtonToggleSwitch"
|
|
BasedOn="{StaticResource {x:Type ToggleSwitch}}"
|
|
TargetType="ToggleSwitch">
|
|
<Setter Property="Padding" Value="8" />
|
|
<Setter Property="CornerRadius" Value="3" />
|
|
<Setter Property="Background" Value="Transparent" />
|
|
<Setter Property="FocusAdorner">
|
|
<FocusAdornerTemplate>
|
|
<Border BorderThickness="{DynamicResource AdornerLayerBorderThickness}"
|
|
BorderBrush="{DynamicResource AdornerLayerStroke}" />
|
|
</FocusAdornerTemplate>
|
|
</Setter>
|
|
<Setter Property="Template">
|
|
<ControlTemplate TargetType="ToggleSwitch">
|
|
<Border
|
|
Name="Background"
|
|
Padding="{TemplateBinding Padding}"
|
|
Background="{TemplateBinding Background}"
|
|
CornerRadius="{TemplateBinding CornerRadius}"
|
|
Cursor="Hand">
|
|
<Panel>
|
|
<Panel x:Name="PART_SwitchKnob" />
|
|
<Panel x:Name="PART_MovingKnobs" />
|
|
<ContentPresenter
|
|
x:Name="PART_OnContentPresenter"
|
|
Margin="{DynamicResource ToggleSwitchOnContentMargin}"
|
|
Content="{TemplateBinding OnContent}"
|
|
ContentTemplate="{TemplateBinding OnContentTemplate}" />
|
|
<ContentPresenter
|
|
x:Name="PART_OffContentPresenter"
|
|
Margin="{DynamicResource ToggleSwitchOnContentMargin}"
|
|
Content="{TemplateBinding OffContent}"
|
|
ContentTemplate="{TemplateBinding OffContentTemplate}" />
|
|
</Panel>
|
|
</Border>
|
|
</ControlTemplate>
|
|
</Setter>
|
|
<Style Selector="^:pointerover">
|
|
<Setter Property="Background" Value="{DynamicResource ButtonDefaultPointeroverBackground}" />
|
|
</Style>
|
|
<Style Selector="^:pressed">
|
|
<Setter Property="Background" Value="{DynamicResource ButtonDefaultPressedBackground}" />
|
|
</Style>
|
|
</ControlTheme>
|
|
|
|
<ControlTheme
|
|
x:Key="SimpleToggleSwitch"
|
|
BasedOn="{StaticResource {x:Type ToggleSwitch}}"
|
|
TargetType="ToggleSwitch">
|
|
<Setter Property="OnContent" Value="{x:Null}" />
|
|
<Setter Property="OffContent" Value="{x:Null}" />
|
|
<Setter Property="FontSize" Value="{DynamicResource SimpleToggleSwitchFontSize}" />
|
|
<Setter Property="Template">
|
|
<ControlTemplate TargetType="ToggleSwitch">
|
|
<Border
|
|
x:Name="SwitchBackgroundBorder"
|
|
Background="{TemplateBinding Background}"
|
|
Cursor="Hand"
|
|
Width="{DynamicResource ToggleSwitchDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchDefaultHeight}"
|
|
BorderBrush="{DynamicResource ToggleSwitchDefaultBorderBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="100">
|
|
<Border.Transitions>
|
|
<Transitions>
|
|
<BrushTransition Property="Background" Duration="0:0:0.2" />
|
|
</Transitions>
|
|
</Border.Transitions>
|
|
<Grid
|
|
ColumnDefinitions="*,*">
|
|
<Canvas
|
|
x:Name="PART_SwitchKnob"
|
|
Grid.Column="0"
|
|
Grid.ColumnSpan="2"
|
|
Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
HorizontalAlignment="Left">
|
|
<Grid
|
|
x:Name="PART_MovingKnobs"
|
|
Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
|
|
Margin="{DynamicResource ToggleSwitchIndicatorDefaultMargin}">
|
|
<Border
|
|
x:Name="SwitchKnobIndicator"
|
|
Background="White"
|
|
BoxShadow="0 0 1 1 #222E3238"
|
|
CornerRadius="100" />
|
|
<Arc
|
|
x:Name="SwitchKnobLoadingIndicator"
|
|
IsVisible="False"
|
|
StrokeThickness="2"
|
|
StartAngle="0"
|
|
SweepAngle="140"
|
|
StrokeJoin="Round"
|
|
StrokeLineCap="Round">
|
|
<Arc.Stroke>
|
|
<ConicGradientBrush>
|
|
<GradientStops>
|
|
<GradientStop Offset="0.1" Color="Transparent" />
|
|
<GradientStop Offset="0.7" Color="White" />
|
|
</GradientStops>
|
|
</ConicGradientBrush>
|
|
</Arc.Stroke>
|
|
<Arc.Styles>
|
|
<Style Selector="Arc[IsVisible=True]">
|
|
<Style.Animations>
|
|
<Animation IterationCount="Infinite" Duration="0:0:0.6">
|
|
<KeyFrame Cue="0%">
|
|
<Setter Property="RotateTransform.Angle" Value="0.0" />
|
|
</KeyFrame>
|
|
<KeyFrame Cue="100%">
|
|
<Setter Property="RotateTransform.Angle" Value="360.0" />
|
|
</KeyFrame>
|
|
</Animation>
|
|
</Style.Animations>
|
|
</Style>
|
|
</Arc.Styles>
|
|
</Arc>
|
|
</Grid>
|
|
</Canvas>
|
|
<ContentPresenter
|
|
x:Name="PART_OnContentPresenter"
|
|
Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
FontSize="{TemplateBinding FontSize}"
|
|
Foreground="{TemplateBinding Foreground}"
|
|
Content="{TemplateBinding OnContent}"
|
|
ContentTemplate="{TemplateBinding OnContentTemplate}" />
|
|
<ContentPresenter
|
|
x:Name="PART_OffContentPresenter"
|
|
Grid.Column="1"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
FontSize="{TemplateBinding FontSize}"
|
|
Foreground="{TemplateBinding Foreground}"
|
|
Content="{TemplateBinding OffContent}"
|
|
ContentTemplate="{TemplateBinding OffContentTemplate}" />
|
|
</Grid>
|
|
</Border>
|
|
</ControlTemplate>
|
|
</Setter>
|
|
<Style Selector="^:unchecked">
|
|
<Setter Property="Foreground" Value="{DynamicResource SimpleToggleSwitchContainerUnCheckedForeground}" />
|
|
</Style>
|
|
<Style Selector="^:checked">
|
|
<Setter Property="Foreground" Value="{DynamicResource SimpleToggleSwitchContainerCheckedForeground}" />
|
|
</Style>
|
|
<Style Selector="^.Small">
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
|
|
<Setter Property="IsVisible" Value="False" />
|
|
</Style>
|
|
<Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
|
|
<Setter Property="IsVisible" Value="False" />
|
|
</Style>
|
|
</Style>
|
|
</ControlTheme>
|
|
</ResourceDictionary> |