在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
到ViewModel
的普通网页一样,但是什么?
答案 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";
}
}