Themes/MaterialDesignTheme.ColorPicker.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Slider.xaml" /> </ResourceDictionary.MergedDictionaries> <ControlTemplate x:Key="MaterialDesignColorSliderThumb" TargetType="{x:Type Thumb}"> <Grid HorizontalAlignment="Center" VerticalAlignment="Center" UseLayoutRounding="True"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleX"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1.3" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleY"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1.3" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="MouseOver"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleX"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1.3" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleY"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1.3" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Pressed"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleX"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1.3"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="grip" Storyboard.TargetProperty="RenderTransform.ScaleY"> <EasingDoubleKeyFrame KeyTime="0:0:0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1.3"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseInOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Ellipse Width="20" Height="20" Fill="White" RenderTransformOrigin=".5,.5" UseLayoutRounding="True" /> <Ellipse x:Name="shadow" Width="24" Height="24" Margin="-12" Fill="{TemplateBinding Foreground}" Opacity=".0" UseLayoutRounding="True" /> <Ellipse x:Name="grip" Width="16" Height="16" Fill="{TemplateBinding Foreground}" RenderTransformOrigin=".5,.5" UseLayoutRounding="True"> <Ellipse.RenderTransform> <ScaleTransform ScaleX="1" ScaleY="1" /> </Ellipse.RenderTransform> </Ellipse> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="shadow" Storyboard.TargetProperty="Opacity" To=".26" Duration="0:0:0.2" /> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="shadow" Storyboard.TargetProperty="Opacity" To=".0" Duration="0:0:0.2" /> </Storyboard> </BeginStoryboard> </Trigger.ExitActions> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="grip" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> <Setter TargetName="grip" Property="Stroke" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <ControlTemplate x:Key="MaterialDesignColorSliderHorizontal" TargetType="{x:Type Slider}"> <Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Border Grid.Row="1" Height="8" CornerRadius="4"> <Border.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Offset="0" Color="#FF0000" /> <GradientStop Offset="0.166" Color="#FFFF00" /> <GradientStop Offset="0.333" Color="#00FF00" /> <GradientStop Offset="0.5" Color="#00FFFF" /> <GradientStop Offset="0.666" Color="#0000FF" /> <GradientStop Offset="0.833" Color="#FF00FF" /> <GradientStop Offset="1.0" Color="#FF0000" /> </LinearGradientBrush> </Border.Background> </Border> <Track x:Name="PART_Track" Grid.Row="1" OpacityMask="{x:Null}"> <Track.DecreaseRepeatButton> <RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource MaterialDesignRepeatButton}" /> </Track.DecreaseRepeatButton> <Track.IncreaseRepeatButton> <RepeatButton Command="{x:Static Slider.IncreaseLarge}" Style="{StaticResource MaterialDesignRepeatButton}" /> </Track.IncreaseRepeatButton> <Track.Thumb> <Thumb x:Name="Thumb" Width="20" Height="20" VerticalAlignment="Center" Focusable="False" OverridesDefaultStyle="True" Template="{StaticResource MaterialDesignColorSliderThumb}"> <Thumb.Foreground> <MultiBinding Converter="{x:Static converters:HsbToColorConverter.Instance}"> <Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding> <Binding.Source> <sys:Double>1</sys:Double> </Binding.Source> </Binding> <Binding> <Binding.Source> <sys:Double>1</sys:Double> </Binding.Source> </Binding> </MultiBinding> </Thumb.Foreground> </Thumb> </Track.Thumb> </Track> </Grid> </Border> </ControlTemplate> <ControlTemplate x:Key="MaterialDesignColorSliderVertical" TargetType="{x:Type Slider}"> <Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" MinWidth="{TemplateBinding MinWidth}" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Border Grid.Column="1" Width="8" CornerRadius="4"> <Border.Background> <LinearGradientBrush StartPoint="1,1" EndPoint="0,0"> <GradientStop Offset="0" Color="#FF0000" /> <GradientStop Offset="0.166" Color="#FFFF00" /> <GradientStop Offset="0.333" Color="#00FF00" /> <GradientStop Offset="0.5" Color="#00FFFF" /> <GradientStop Offset="0.666" Color="#0000FF" /> <GradientStop Offset="0.833" Color="#FF00FF" /> <GradientStop Offset="1.0" Color="#FF0000" /> </LinearGradientBrush> </Border.Background> </Border> <Track x:Name="PART_Track" Grid.Column="1"> <Track.DecreaseRepeatButton> <RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource MaterialDesignRepeatButton}" /> </Track.DecreaseRepeatButton> <Track.IncreaseRepeatButton> <RepeatButton Command="{x:Static Slider.IncreaseLarge}" Style="{StaticResource MaterialDesignRepeatButton}" /> </Track.IncreaseRepeatButton> <Track.Thumb> <Thumb x:Name="Thumb" Width="20" Height="20" VerticalAlignment="Top" Focusable="False" OverridesDefaultStyle="True" Template="{StaticResource MaterialDesignColorSliderThumb}"> <Thumb.Foreground> <MultiBinding Converter="{x:Static converters:HsbToColorConverter.Instance}"> <Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding> <Binding.Source> <sys:Double>1</sys:Double> </Binding.Source> </Binding> <Binding> <Binding.Source> <sys:Double>1</sys:Double> </Binding.Source> </Binding> </MultiBinding> </Thumb.Foreground> </Thumb> </Track.Thumb> </Track> </Grid> </Border> </ControlTemplate> <Style x:Key="MaterialDesignColorSlider" TargetType="{x:Type Slider}"> <Setter Property="Background" Value="{x:Null}" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="Maximum" Value="360" /> <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" /> <Setter Property="Template" Value="{StaticResource MaterialDesignColorSliderHorizontal}" /> <Style.Triggers> <Trigger Property="Orientation" Value="Vertical"> <Setter Property="Template" Value="{StaticResource MaterialDesignColorSliderVertical}" /> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> </Trigger> </Style.Triggers> </Style> <ControlTemplate x:Key="ColorPickerHorizontal" TargetType="{x:Type wpf:ColorPicker}"> <DockPanel> <Slider x:Name="PART_HueSlider" Margin="8" DockPanel.Dock="{TemplateBinding HueSliderPosition}" IsMoveToPointEnabled="True" Orientation="Horizontal" Style="{StaticResource MaterialDesignColorSlider}" Value="{Binding Hsb.Hue, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" /> <Grid> <Rectangle Fill="{Binding Hsb.Hue, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HsbLinearGradientConverter.Instance}}" /> <Rectangle Fill="Black"> <Rectangle.OpacityMask> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="Transparent" /> <GradientStop Offset="1.0" Color="Black" /> </LinearGradientBrush> </Rectangle.OpacityMask> </Rectangle> <Canvas Name="PART_SaturationBrightnessPicker" Background="Transparent" ClipToBounds="True" Focusable="True"> <Thumb Name="PART_SaturationBrightnessPickerThumb" Canvas.Left="20" Canvas.Top="20"> <Thumb.Template> <ControlTemplate> <Ellipse Width="24" Height="24" Margin="-12,-12,0,0" Fill="Transparent" Stroke="White" StrokeThickness="2" /> </ControlTemplate> </Thumb.Template> </Thumb> </Canvas> </Grid> </DockPanel> </ControlTemplate> <ControlTemplate x:Key="ColorPickerVertical" TargetType="{x:Type wpf:ColorPicker}"> <DockPanel> <Slider x:Name="PART_HueSlider" Margin="8" DockPanel.Dock="{TemplateBinding HueSliderPosition}" IsMoveToPointEnabled="True" Orientation="Vertical" Style="{StaticResource MaterialDesignColorSlider}" Value="{Binding Hsb.Hue, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" /> <Grid> <Rectangle Fill="{Binding Hsb.Hue, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HsbLinearGradientConverter.Instance}}" /> <Rectangle Fill="Black"> <Rectangle.OpacityMask> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="Transparent" /> <GradientStop Offset="1.0" Color="Black" /> </LinearGradientBrush> </Rectangle.OpacityMask> </Rectangle> <Canvas Name="PART_SaturationBrightnessPicker" Background="Transparent" ClipToBounds="True" Focusable="True"> <Thumb Name="PART_SaturationBrightnessPickerThumb" Canvas.Left="20" Canvas.Top="20"> <Thumb.Template> <ControlTemplate> <Ellipse Width="24" Height="24" Margin="-12,-12,0,0" Fill="Transparent" Stroke="White" StrokeThickness="2" /> </ControlTemplate> </Thumb.Template> </Thumb> </Canvas> </Grid> </DockPanel> </ControlTemplate> <Style TargetType="{x:Type wpf:ColorPicker}"> <Style.Triggers> <Trigger Property="HueSliderPosition" Value="Top"> <Setter Property="Template" Value="{StaticResource ColorPickerHorizontal}" /> </Trigger> <Trigger Property="HueSliderPosition" Value="Bottom"> <Setter Property="Template" Value="{StaticResource ColorPickerHorizontal}" /> </Trigger> <Trigger Property="HueSliderPosition" Value="Left"> <Setter Property="Template" Value="{StaticResource ColorPickerVertical}" /> </Trigger> <Trigger Property="HueSliderPosition" Value="Right"> <Setter Property="Template" Value="{StaticResource ColorPickerVertical}" /> </Trigger> </Style.Triggers> </Style> </ResourceDictionary> |