2013-10-09 4 views
1

Я пытаюсь связать цвет фона, но по какой-то причине он не обновляет элемент управления, я вижу, что он попадает в свойство get, но не обновляет графический интерфейс. Есть что-то, чего я не хватает?WPF Простая привязка цвета не работает

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
    } 

    // ... 

    private Color m_myColorProperty; 
    public Color MyColorProperty 
    { 
     get 
     { 
      return m_myColorProperty; 
     } 
     set 
     { 
      m_myColorProperty = value; 
      OnPropertyChanged("MyColorProperty"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

И XAML:

<Window x:Class="TestApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.Background> 
     <SolidColorBrush Color="{Binding MyColorProperty}"/> 
    </Grid.Background> 
+1

Где и как вы устанавливаете значение 'MyColorProperty'? –

+0

Какой у вас импорт? есть 2 разных типа «Цвет», может быть, у вас неправильный? –

ответ

0

Использование кода в качестве основы, добавляя следующее внутри MainWindow конструктору предоставил мне окно спортивные прекрасный розовый фон:

this.MyColorProperty = (Color)ColorConverter.ConvertFromString("#FFCC0099"); 
1

Вы должны привязать тип кисти не к цвету. SolidBrush, Gradient Brush и т. Д., Если вы хотите, чтобы один цвет использовал сплошную кисть

+0

Вы пробовали это? Свойство SolidColorBrush.Color имеет тип System.Windows.Media.Color: http://msdn.microsoft.com/en-us/library/system.windows.media.solidcolorbrush.color.aspx – Daniel

0

Поскольку вы используете «это» (окно) в качестве datacontext, было бы проще использовать DependencyProperty вместо того, чтобы проходить через работу внедрения INotifyPropertyChanged?

+0

. Связывание с RelativeSource не будет работа в этом случае. Self будет Brush (или Grid не совсем уверен) Но не окно. С другой стороны работает ElementName в окне. – dowhilefor

+0

ах да. или вам понадобится окно RelativeSource Ancestor и ancestoroftype. Но для свойства я все еще думаю, что использование DP было бы проще, чем внедрение INPC для такого рода вещей, поскольку его уже «DependencyObject» –

+0

Да, я также использовал бы свойство зависимостей для этого, просто хотел указать, что FindAncestor или ElementName необходимо для доступа к свойству. – dowhilefor

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