2014-01-31 3 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.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 конструктор:

уаг кисть = новый SolidColorBrush (myColor);

+1

Rectangle.Fill имеет тип System.Windows.Media.Brush, а не цвет. –

+0

Отредактировал мой ответ – Bas

1

Rectangle.Fill принимает объект 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; 

Моя рекомендация является использование 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"); 

С уважением !!!

Смежные вопросы