2014-01-31 27 views
0

我有我的目标这个领域,我想绑定到一个矩形无法绑定的ColorCode到矩形填充

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" /> 

但是,当我启动应用程序,我不会这个属性适用于矩形。

为什么?

回答

0

Rectangle.FillSystem.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刷=新的SolidColorBrush(myColor);

+1

Rectangle.Fill的类型是System.Windows.Media.Brush,而不是Color。 –

+0

编辑我的答案 – Bas

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"); 
0

Saphire,你的例子完美运行。只是缺少你绑定窗口的DataContext与窗口代码隐藏,这个代码在窗口构造函数:

this.DataContext = this; 

我recomendation是使用的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"); 

Regards !!!