App.xaml Application.Resources中的WP7绑定

时间:2011-10-29 09:51:45

标签: windows-phone-7 binding resources

在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);
    }
 }

但这还不够,它没有约束力。我认为它必须与DataContextViewModel的普通网页一样,但是什么?

2 个答案:

答案 0 :(得分:2)

如果您绑定到存储Color的属性,并且您将在运行时更改并期望它更新,那么您是否还需要实现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 :(得分:1)

您将color属性绑定到字符串对象。 虽然我从未尝试过,但我确信它不起作用。

也许该课程的文档会有所帮助。 See this link.

您是否尝试使用颜色类?

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