2011-10-29 63 views
0

綁定在App.xaml中<Application.Resources>WP7在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); 
    } 
} 

,但這是遠遠不夠的,它不具有約束力。我認爲它一定是正常頁面上的東西,DataContextViewModel,但是什麼?

回答

2

如果你綁定到存儲的顏色和你要在運行時更改,並期望它更新一個屬性,你不必須實現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 - 如果顏色是不會更改運行時,你已經得到了什麼應該是精細。

+0

沒錯。這就是我將在PhoneApplicationPage的普通頁面上做的事情,你可以放置this.DataContext = MyViewModel,但我問我應該如何從App.xaml這是應用程序,並沒有DataContext字段。 – giacoder

+0

這不是關於DataContext,而是關於DependencyProperty /通知屬性的更改,所以你應該能夠在App.xaml.cs中包裝一個屬性來做同樣的事情。此鏈接也可能或不會幫助 - http://forums.silverlight.net/t/229874.aspx/1 –

+0

非常感謝!這幫助了我很多。 – giacoder

1

您將一個顏色屬性綁定到一個字符串對象。 雖然我從來沒有嘗試過,但我確信它不會起作用。

也許該課程的文檔將有所幫助。 See this link.

您是否嘗試使用顏色類?

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

使用Color FromArgb方法將您的十六進制值轉換爲彩色對象。 [見此](http://msdn.microsoft.com/en-us/library/2zys7833.aspx)。 – abhinav

+0

已更新一個問題 – giacoder

+0

爲什麼不直接從代碼中添加資源? 'Resources.Add(「ColorMain」,Color.FromARGB(a,r,g,b));'所有使用這個資源的控件都會從你導航的下一頁更新。 – abhinav