3 回答

TA貢獻1824條經驗 獲得超6個贊
我建議不要“從后面的代碼中獲取顏色。
您通常需要刷子,但有時需要顏色。以下是我通常如何定義這些:
<Color x:Key="PaleBlue">#44A7F7</Color>
<Color x:Key="PaleRed">#F75B71</Color>
<SolidColorBrush x:Key="PaleBlueBrush" Color="{StaticResource PaleBlue}"/>
<SolidColorBrush x:Key="PaleRedBrush" Color="{StaticResource PaleRed}"/>
這些進入一個資源字典,該字典合并在 app.xaml 中,因此它們具有整個應用程序的范圍。
如果我想改變一個主題,我為(比如說)黑暗主題定義另一個資源字典,為藍色主題定義另一個資源字典......等等。
要更改主題,我將適當的資源字典合并到 application.current.resources 中,然后它們替換原來的。如果您希望它們立即更改,則需要使用 DynamicResource 來引用它們,但主題更改通常是不尋常的事情,并且“只是”完全重新加載您的窗口是可以接受的。
如果你真的想的話,你可以在代碼中替換其中的一個。
Application.Current.Resources["PaleRedBrush"] = // 一些新的solidcolorbrush。
資源字典中的很多東西都被凍結了(有一個 Freeze() 方法),您無法更改它們。我從未嘗試過確切地實施您在那里所做的事情,但我認為這可能是有問題的。
您也可以使用實現 inotifypropertychanged 的橋接靜態依賴對象或類。一位候選人將涉及可觀察字典作為靜態屬性。這將允許您通過字符串作為名稱綁定到畫筆。http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/ 也沒試過。

TA貢獻1815條經驗 獲得超10個贊
您不需要 Styles.xaml.cs 中的任何內容。創建 Styles.xaml 資源字典:
<ResourceDictionary>
<SolidColorBrush x:Key="AccentColor" Color="#FFFFFF" />
</<ResourceDictionary>
要在其他 xaml 文件中使用此顏色,您必須在合并的字典標記中聲明它及其路徑:
<Window>
<Window.Resources>
<ResourceDictionary x:Uid="ResourceDictionary_1">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</Window.Resources>
<TextBlock Background="{StaticResource AccentColor}"/>
</Window>
您可以像我以前應用 TextBlock 背景的方式使用它。您必須在 ResourceDictionary 的 Source 標記中提供 Styles.xaml 的路徑。
- 3 回答
- 0 關注
- 406 瀏覽
添加回答
舉報