Browse Source

add pressed and disabled states.

feature/fluent-slider
Dan Walmsley 6 years ago
parent
commit
430a428c2f
  1. 21
      src/Avalonia.Controls/Slider.cs
  2. 61
      src/Avalonia.Themes.Fluent/Slider.xaml

21
src/Avalonia.Controls/Slider.cs

@ -44,6 +44,9 @@ namespace Avalonia.Controls
Thumb.DragStartedEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragStarted(e), RoutingStrategies.Bubble); Thumb.DragStartedEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragStarted(e), RoutingStrategies.Bubble);
Thumb.DragDeltaEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragDelta(e), RoutingStrategies.Bubble); Thumb.DragDeltaEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragDelta(e), RoutingStrategies.Bubble);
Thumb.DragCompletedEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragCompleted(e), RoutingStrategies.Bubble); Thumb.DragCompletedEvent.AddClassHandler<Slider>((x, e) => x.OnThumbDragCompleted(e), RoutingStrategies.Bubble);
PointerPressedEvent.AddClassHandler<Slider>((x, e) => x.HandlePointerPressed(e), RoutingStrategies.Tunnel, true);
PointerReleasedEvent.AddClassHandler<Slider>((x, e) => x.HandlePointerReleased(), RoutingStrategies.Tunnel, true);
PointerCaptureLostEvent.AddClassHandler<Slider>((x, e) => x.HandlePointerReleased(), RoutingStrategies.Tunnel, true);
} }
/// <summary> /// <summary>
@ -207,6 +210,24 @@ namespace Avalonia.Controls
return value; return value;
} }
private void HandlePointerPressed(PointerPressedEventArgs e)
{
if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
{
UpdatePseudoClasses(true);
}
}
private void HandlePointerReleased()
{
UpdatePseudoClasses(false);
}
private void UpdatePseudoClasses(bool isPressed)
{
PseudoClasses.Set(":pressed", isPressed);
}
private void UpdatePseudoClasses(Orientation o) private void UpdatePseudoClasses(Orientation o)
{ {
PseudoClasses.Set(":vertical", o == Orientation.Vertical); PseudoClasses.Set(":vertical", o == Orientation.Vertical);

61
src/Avalonia.Themes.Fluent/Slider.xaml

@ -1,7 +1,10 @@
<Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Design.PreviewWith> <Design.PreviewWith>
<Border Margin="20" Width="200"> <Border Margin="20" Width="200">
<Slider Value="50" /> <StackPanel Spacing="10">
<Slider Value="50" />
<Slider IsEnabled="False" Value="50" />
</StackPanel>
</Border> </Border>
</Design.PreviewWith> </Design.PreviewWith>
<Styles.Resources> <Styles.Resources>
@ -31,7 +34,7 @@
<Grid Name="grid" Margin="{TemplateBinding Padding}" RowDefinitions="Auto, *"> <Grid Name="grid" Margin="{TemplateBinding Padding}" RowDefinitions="Auto, *">
<Grid.Styles> <Grid.Styles>
<Style Selector="Thumb.SliderThumbStyle"> <Style Selector="Thumb.SliderThumbStyle">
<Setter Property="BorderThickness" Value="0" /> <Setter Property="BorderThickness" Value="0" />
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <Setter.Value>
<ControlTemplate> <ControlTemplate>
@ -113,11 +116,11 @@
</RepeatButton.Template> </RepeatButton.Template>
</RepeatButton> </RepeatButton>
</Track.IncreaseButton> </Track.IncreaseButton>
<Thumb Classes="SliderThumbStyle" <Thumb Classes="SliderThumbStyle"
Name="thumb" Name="thumb"
Margin="0" Padding="0" Margin="0" Padding="0"
DataContext="{TemplateBinding Value}" DataContext="{TemplateBinding Value}"
Height="{DynamicResource SliderHorizontalThumbHeight}" Height="{DynamicResource SliderHorizontalThumbHeight}"
Width="{DynamicResource SliderHorizontalThumbWidth}" /> Width="{DynamicResource SliderHorizontalThumbWidth}" />
</Track> </Track>
</Grid> </Grid>
@ -138,19 +141,36 @@
<Style Selector="Slider /template/ Thumb.SliderThumbStyle"> <Style Selector="Slider /template/ Thumb.SliderThumbStyle">
<Setter Property="Background" Value="{DynamicResource SliderThumbBackground}" /> <Setter Property="Background" Value="{DynamicResource SliderThumbBackground}" />
</Style> </Style>
<Style Selector="Slider /template/ Grid#SliderContainer"> <Style Selector="Slider /template/ Grid#SliderContainer">
<Setter Property="Background" Value="{DynamicResource SliderContainerBackground}" /> <Setter Property="Background" Value="{DynamicResource SliderContainerBackground}" />
</Style> </Style>
<!-- Pressed State -->
<!-- Disabled State --> <!-- Disabled State -->
<Style Selector="Slider:disabled /template/ ContentPresenter#HeaderContentPresenter">
<Setter Property="TextBlock.Foreground" Value="{DynamicResource SliderHeaderForegroundDisabled}" />
</Style>
<Style Selector="Slider:disabled /template/ RepeatButton#PART_DecreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackValueFillDisabled}" />
</Style>
<Style Selector="Slider:disabled /template/ RepeatButton#PART_IncreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackFillDisabled}" />
</Style>
<Style Selector="Slider:disabled /template/ Thumb.SliderThumbStyle">
<Setter Property="Background" Value="{DynamicResource SliderThumbBackgroundDisabled}" />
</Style>
<Style Selector="Slider:pointerover /template/ Grid#SliderContainer">
<Setter Property="Background" Value="{DynamicResource SliderContainerBackgroundDisabled}" />
</Style>
<!-- PointerOver State --> <!-- PointerOver State -->
<Style Selector="Slider:pointerover /template/ RepeatButton#PART_IncreaseButton"> <Style Selector="Slider:pointerover /template/ RepeatButton#PART_IncreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackFillPointerOver}" /> <Setter Property="Background" Value="{DynamicResource SliderTrackFillPointerOver}" />
</Style> </Style>
<Style Selector="Slider:pointerover /template/ Thumb.SliderThumbStyle"> <Style Selector="Slider:pointerover /template/ Thumb.SliderThumbStyle">
<Setter Property="Background" Value="{DynamicResource SliderThumbBackgroundPointerOver}" /> <Setter Property="Background" Value="{DynamicResource SliderThumbBackgroundPointerOver}" />
@ -163,4 +183,21 @@
<Style Selector="Slider:pointerover /template/ RepeatButton#PART_DecreaseButton"> <Style Selector="Slider:pointerover /template/ RepeatButton#PART_DecreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackValueFillPointerOver}" /> <Setter Property="Background" Value="{DynamicResource SliderTrackValueFillPointerOver}" />
</Style> </Style>
<!-- Pressed State -->
<Style Selector="Slider:pressed /template/ RepeatButton#PART_IncreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackFillPressed}" />
</Style>
<Style Selector="Slider:pressed /template/ Thumb.SliderThumbStyle">
<Setter Property="Background" Value="{DynamicResource SliderThumbBackgroundPressed}" />
</Style>
<Style Selector="Slider:pointerover /template/ Grid#SliderContainer">
<Setter Property="Background" Value="{DynamicResource SliderContainerBackgroundPressed}" />
</Style>
<Style Selector="Slider:pointerover /template/ RepeatButton#PART_DecreaseButton">
<Setter Property="Background" Value="{DynamicResource SliderTrackValueFillPressed}" />
</Style>
</Styles> </Styles>

Loading…
Cancel
Save