Использование динамического переднего плана с LinearGradientBrush

Я работаю над приложением WPF впервые

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

на C# я написал. // Здесь я создаю куст линейного градиента, коллекцию остановок градиента, остановки градиента, которые мне нужны, и преобразователь кисти, чтобы получить цветовые коды #Fxxxx в цвете

        BrushConverter bc = new BrushConverter();
        public LinearGradientBrush MetallicBlue= new LinearGradientBrush();
        public GradientStopCollection BlueG = new GradientStopCollection();
        public GradientStop BGS1 = new GradientStop();
        public GradientStop BGS2 = new GradientStop();
        public GradientStop BGS3 = new GradientStop();
        public GradientStop BGS4 = new GradientStop();

// Затем я определяю каждую градиентную остановку и добавляю ее в коллекцию GradientStop

            BGS1.Color = (Color)bc.ConvertFrom("#FF094AAD");
            BGS1.Offset = 0.244;
            BGS2.Color = (Color)bc.ConvertFrom("#FF0745AA");
            BGS2.Offset = 0.988;
            BGS3.Color = (Color)bc.ConvertFrom("#FF286ED1");
            BGS3.Offset = 0.5;
            BGS4.Color = (Color)bc.ConvertFrom("#FF094AAD");
            BGS4.Offset = 0.076;
            BlueG.Add(BGS1);
            BlueG.Add(BGS2);
            BlueG.Add(BGS3);
            BlueG.Add(BGS4);

// Здесь я установил свой металлический синий со свойствами

MetallicBlue.StartPoint = new Point(0.5, 0);
MetallicBlue.EndPoint = new Point(0.5, 1);
MetallicBlue.GradientStops = BlueG;

На моем событии клика, когда я устанавливаю цвет переднего плана, оно меняется на пустое! Текст исчезает.

textBlock.Foreground = MetallicBlue;

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

1 ответ

Решение

BrushConverter возвращает Brush, Вы должны использовать ColorConverter, Это прекрасно работает для меня:

ColorConverter cc = new ColorConverter();
LinearGradientBrush MetallicBlue = new LinearGradientBrush();
GradientStopCollection BlueG = new GradientStopCollection();
GradientStop BGS1 = new GradientStop();
GradientStop BGS2 = new GradientStop();
GradientStop BGS3 = new GradientStop();
GradientStop BGS4 = new GradientStop();

BGS1.Color = (Color)cc.ConvertFrom("#FF094AAD");
BGS1.Offset = 0.244;
BGS2.Color = (Color)cc.ConvertFrom("#FF0745AA");
BGS2.Offset = 0.988;
BGS3.Color = (Color)cc.ConvertFrom("#FF286ED1");
BGS3.Offset = 0.5;
BGS4.Color = (Color)cc.ConvertFrom("#FF094AAD");
BGS4.Offset = 0.076;
BGS4.Offset = 0.076;
BlueG.Add(BGS1);
BlueG.Add(BGS2);
BlueG.Add(BGS3);
BlueG.Add(BGS4);

MetallicBlue.StartPoint = new Point(0.5, 0);
MetallicBlue.EndPoint = new Point(0.5, 1);
MetallicBlue.GradientStops = BlueG;

textBlock.Foreground = MetallicBlue;
textBlock.Text = "Sample";
textBlock.FontSize = 40;

Другие вопросы по тегам