Возможно ли иметь несколько фонов для Slider Trackbar Control в WPF? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать многоцветный слайдер. У меня есть три цвета: красный, зеленый, синий. Я пытаюсь установить цвет 0-33 Красный, 34-66 Зеленый, 67-100 Синий ползунка Трек-бар

Я не понимаю, как это сделать.

Я былвозможность установить фон слайдера, но у меня появляется градиент. Мне нужно что-то похожее на это, но не градиент, а только сплошные цвета.

var brush = new LinearGradientBrush(new GradientStopCollection() { 
                new GradientStop(Colors.Red, 0.0),
                new GradientStop(Colors.Blue, 0.3),
                new GradientStop(Colors.Green, 0.6),
            });
            TestBar.Background = brush;

Я пытаюсь сделать что-то динамическое, например, если у меня есть классэто

class SomeObject {
    public int From;
    public int To;
    public string Color;
}

Я могу изменить цвета трекбаров без каких-либо проблем.

1 Ответ

0 голосов
/ 05 октября 2019

Я попытался сделать то, что я думаю, что вы хотите здесь, используя полный пользовательский контроль. Код на GitHub . Возможно, есть более простые способы сделать это, но так как вы хотите, чтобы фон элемента управления был разделен на три и раскрашен, я подумал, что логично было бы поместить три прямоугольника в шаблон элемента управления и покрасить их.

enter image description here

Код содержит элемент управления 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);

Надеюсь, это поможет, очевидно, это немного просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...