我的对象中有这个字段,我想绑定到一个矩形
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 :(得分: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");
问候!!!