Привязка WP7 в приложении App.xaml.Ресурсы

#windows-phone-7 #binding #resources

#windows-phone-7 #привязка #Ресурсы

Вопрос:

В 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: abhinav прав, это должен быть цвет

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

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

Ответ №1:

Если вы привязываетесь к свойству, в котором хранится цвет, и собираетесь изменять его во время выполнения и ожидать его обновления, разве вам не нужно также внедрять 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. Это верно. Вот как я бы поступил на обычной странице, которая является PhoneApplicationPage, и вы можете разместить это. DataContext=MyViewModel, но я спрашиваю, как мне это сделать из App.xaml, который является приложением и не имеет поля DataContext.

2. Речь идет не о DataContext, а об изменениях свойства DependencyProperty / notifying, поэтому вы должны иметь возможность обернуть свойство в App.xaml.cs, чтобы сделать то же самое. Эта ссылка также может помочь, а может и не помочь — forums.silverlight.net/t/229874.aspx/1

Ответ №2:

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

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

Вы пробовали использовать вместо этого класс color?

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

Комментарии:

1. используйте метод Color FromArgb для преобразования вашего шестнадцатеричного значения в объект color. Посмотрите это .

2. Почему бы вам не добавить ресурс непосредственно в код формы? Resources.Add("ColorMain", Color.FromARGB(a, r, g, b)); Все элементы управления, использующие этот ресурс, будут обновлены на следующей странице, на которую вы перейдете.