WP7 Binding в App.xaml Application.Resources - PullRequest
0 голосов
/ 29 октября 2011

В App.xaml <Application.Resources>

У меня есть:

<Color x:Key="ColorMain">#FF1F879C</Color>
<SolidColorBrush x:Key="ColorBrushMain" Color="{StaticResource ColorMain}"/>

, тогда у меня есть много шаблонов, которые используют эту кисть и цвет.Эти шаблоны используются во всем приложении.

Мне нужно иметь возможность менять цвет, чтобы менять обложку всего приложения.Мне нужно что-то вроде:

<SolidColorBrush x:Key="ColorBrushMain" Color="{Binding ColorMain}"/>

и в коде что-то вроде:

 public string ColorMain {
    get {
       return ..... ; // "#FF803200";
    }
 }

Но это не работает.Пожалуйста, помогите.

UPD: Абхинав прав, это должен быть цвет

 public Color ColorMain {
    get {
       return ..... ; // return Color.FromArgb(0xFF, 0x80, 0x32, 0x00);
    }
 }

, но этого недостаточно, это не обязательно.Я предполагаю, что это должно быть что-то, как на обычной странице с DataContext до ViewModel, но что?

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

Если вы привязываетесь к свойству, в котором хранится цвет, и собираетесь изменить его во время выполнения и ожидаете его обновления, разве вам не нужно также реализовывать INotifyPropertyChanged? Например:

public class MyViewModel: INotifyPropertyChanged

    private Color _mainColor
    public Color MainColor
    {
        get { return _mainColor; }
        set
        {
            if (value != _mainColor)
            {
                _mainColor= value;
                NotifyPropertyChanged("MainColor");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Итак: если вы ожидаете изменить цвет во время выполнения, используйте связывание и реализуйте INotifyPropertyChanged - если цвет не изменится во время выполнения, то, что вы уже получили, должно быть хорошо.

1 голос
/ 29 октября 2011

Вы привязываете свойство цвета к строковому объекту. Хотя я никогда не пробовал, я уверен, что это не сработает.

Может быть, документация класса поможет. Смотрите эту ссылку.

Вы пытались использовать вместо этого цветовой класс?

    public Color ColorMain {
    get {
       return ..... ; // "#FF803200";
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...