Я попытался сделать то, что я думаю, что вы хотите здесь, используя полный пользовательский контроль. Код на GitHub . Возможно, есть более простые способы сделать это, но так как вы хотите, чтобы фон элемента управления был разделен на три и раскрашен, я подумал, что логично было бы поместить три прямоугольника в шаблон элемента управления и покрасить их.
Код содержит элемент управления ColorSlider со свойствами зависимостей Color1, Color2, Color3 (типа Brush) для трех цветов и Width1, Width2, Width3 (doubles) длятри ширины.
Для этого мы создали класс ColorSlider, который регистрирует свойства зависимостей (отрывок):
public class ColorSlider : Slider
{
public static readonly DependencyProperty Width1Property = DependencyProperty.Register("Width1", typeof(double), typeof(ColorSlider), new UIPropertyMetadata(0.0));
[TypeConverter(typeof(LengthConverter))]
public double Width1
{
get { return (double)GetValue(Width1Property); }
set { SetValue(Width1Property, value); }
}
Нам нужна копия шаблона элемента управления Slider, предназначенная для ColorSlider, а затемсо стеком в своей сетке, как показано ниже (четко отрывок):
<StackPanel Grid.Row="1" Panel.ZIndex="-1" Orientation="Horizontal">
<Rectangle Fill="{TemplateBinding Color1}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width1}" />
<Rectangle Fill="{TemplateBinding Color2}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width2}" />
<Rectangle Fill="{TemplateBinding Color3}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width3}" />
</StackPanel>
Теперь мы можем создать ползунок цвета и установить следующие свойства:
<local:ColorSlider x:Name="MyColorSlider" Template="{DynamicResource ColorSliderControlTemplate}" Width="200" Height="50"
Color1="Red" Color2="Green" Color3="Blue" Width1="68" Width2="66" Width3="66"></local:ColorSlider>
И мы можем установить их динамически изкод:
MyColorSlider.Width3 = 20;
MyColorSlider.Color1 = new SolidColorBrush(Colors.Orange);
Надеюсь, это поможет, очевидно, это немного просто.