【问题标题】:Binding Gradient color in wpf在 wpf 中绑定渐变颜色
【发布时间】:2014-04-02 06:01:52
【问题描述】:

我必须绑定渐变颜色属性。在这个我使用转换器。这是绑定的xaml代码

<GradientStop Color="{Binding Namevalue, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource nametocolorconverter}}"/>

nametocolorconverter的代码

class nametocolorconverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       Brush brw = new Brush();
        if(value == "Blue") brw = Colors.Blue;
        elseif(value=="Green") brw = Colors.Green;
        else brw=Colors.Red;
   return brw;

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }

上面的代码不起作用。我没有得到想要的颜色。

【问题讨论】:

  • 你更改了Namevalue,但颜色没有更改?
  • 你有nametocolorconverter键的资源吗?类似于以下内容:&lt;l:nametocolorconverter x:Key="nametocolorconverter" /&gt;.
  • @UlugbekUmirov 是的,我已将其添加到资源中。
  • @user3449857:是的,颜色没有改变
  • @Amr 调试时,程序是否进入Convert方法?你的颜色总是红色吗?

标签: c# wpf binding colors


【解决方案1】:

您的代码甚至无法编译。

在 Convert 方法中,您声明了一个 Brush 类型的局部变量 brw 并尝试创建一个新的 Brush 实例。除此之外这不起作用,因为Brush 是一个抽象类,你应该有一个Color 类型的变量:

Color color;
if (value == "Blue")
{
    color = Colors.Blue;
}
else if (value == "Green")
{
    color = Colors.Green;
}
else
{
    color = Colors.Red;
}

您也可以使用 switch 语句代替 if-else 链:

switch ((string)value)
{
    case "Blue":
        color = Colors.Blue;
        break;
    case "Green":
        color = Colors.Green;
        break;
    default:
        color = Colors.Red;
        break;
}

或者更简单,如果您只使用标准颜色名称:

return (Color)ColorConverter.ConvertFromString((string)value);

【讨论】:

  • 是的,你是对的。我把它改成颜色,它起作用了。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2011-03-06
相关资源
最近更新 更多