将动态前景与 LinearGradientBrush 结合使用

Using Dynamic Foreground with LinearGradientBrush

我是第一次开发 WPF 应用程序

我有一个按钮,点击它会改变它的前景色。 我觉得常规的颜色很无聊所以我做了一些线性渐变让它看起来更好。

我在 C# 上写的。 // 在这里我创建了一个线性渐变布什,一个渐变停止集合,我需要的渐变停止和一个 brushconverter 来获取颜色代码#Fxxxx into color

        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 Collection

            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;

谁能帮帮我。 我想在许多按钮上实现它,但它不太管用。 我错过了什么。

一个BrushConverterreturns一个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;