无法将colorcode绑定到矩形填充

时间:2014-01-31 12:53:40

标签: c# xaml

我的对象中有这个字段,我想绑定到一个矩形

public string FillVal { get; set; }

我使用以下值之一设置此字段:

    public const string GREENRIBBON = "#FF7CB84D";
    public const string ORANGERIBBON = "#FFECB74D";
    public const string REDRIBBON = "#FFFF4741";

我使用它的矩形设置如下:

<Rectangle x:Name="Level"
    Fill="{Binding FillVal}"
    HorizontalAlignment="Left"
    Height="115"
    VerticalAlignment="Top"
    Width="6"
    Margin="-2,0,0,0" />

但是当我启动应用程序时,我不会将此属性应用于矩形。

为什么?

3 个答案:

答案 0 :(得分:1)

Rectangle.Fill采用Brush对象,因此您必须从颜色字符串创建一个Brush。您可以使用此辅助方法:

private SolidColorBrush GetBrushFromHexString(string hexString)
    {
        hexString = hexString.Replace("#", "");
        int colorInt = Int32.Parse(hexString, NumberStyles.HexNumber);

        byte a = (byte)(colorInt >> 24);
        byte r = (byte)(colorInt >> 16);
        byte g = (byte)(colorInt >> 8);
        byte b = (byte)colorInt;

        Color color = Color.FromArgb(a, r, g, b);

        return new SolidColorBrush(color);
    }



FillVal = GetBrushFromHexString("#FF7CB84D");

答案 1 :(得分:0)

Rectangle.Fill的类型为System.Windows.Media.Brush,您尝试将String值传递给它。这适用于XAML,因为Brush类型具有来自字符串的自动转换器。然而,这在绑定时不起作用。

http://msdn.microsoft.com/en-us/library/system.windows.media.brush(v=vs.110).aspx

您可以通过查看How to get Color from Hexadecimal color code using .NET?

自行使用此转换器

然后你可以使用SolidColorBrush构造函数:

var brush = new SolidColorBrush(myColor);

答案 2 :(得分:0)

Saphire,你的榜样非常完美。只是错过了带窗口代码隐藏的绑定窗口DataContext,在窗口构造函数中使用此代码:

this.DataContext = this;

我的推荐是使用App.xaml或ResourceDictionarys进行此练习:

<Application x:Class="WpfApplication2.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <SolidColorBrush x:Key="GREENRIBBON" Color="#FF7CB84D" />
        <SolidColorBrush x:Key="ORANGERIBBON" Color="#FFECB74D" />
        <SolidColorBrush x:Key="REDRIBBON" Color="#FFFF4741" />
    </Application.Resources>
</Application>

为了动态使用,请在代码中找到您的值:

Brush GreenRibbon  = (Brush)Application.Current.FindResource("GREENRIBBON");
Brush OrangeRibbon = (Brush)Application.Current.FindResource("ORANGERIBBON");
Brush RedRibbon    = (Brush)Application.Current.FindResource("REDRIBBON");

问候!!!