亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ResourceDictionary 中的 WPF 綁定顏色

ResourceDictionary 中的 WPF 綁定顏色

C#
慕斯709654 2022-06-12 11:12:46
我正在學習 WPF,在我的應用程序中我想使用用戶定義的強調色。我所有的樣式都定義在Style.xaml哪個是ResourceDictionary. 我想要實現的是:<ResourceDictionary    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="clr-namespace:Namespace"    x:Class="Namespace.Style"    x:ClassModifier="public">    <Color x:Key="AccentColor"         A="{Binding Accent.A}"        R="{Binding Accent.R}"        G="{Binding Accent.G}"        B="{Binding Accent.B}" />    <SolidColorBrush x:Key="AccentBrush" Color="{Binding AccentColor}"/></ResourceDictionary>并在Style.xaml.cs:namespace Namespace{    public partial class Style : ResourceDictionary    {        // this color can be changed later        public Color Accent { get; set; }        public Style()        {            Accent = Color.FromRgb(0x13, 0xaf, 0xf0);            InitializeComponent();        }    }}上面的代碼給出了錯誤:'A 'Binding' cannot be set on the 'A' property of type 'Color'.  A 'Binding' can only be set on a DependencyProperty of a DependencyObject.'還有哪些其他方法(最好不太復雜,但也很靈活)來實現此功能,讓用戶為應用程序的主題定義自己的強調色?
查看完整描述

3 回答

?
慕妹3242003

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/ 也沒試過。


查看完整回答
反對 回復 2022-06-12
?
動漫人物

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 的路徑。


查看完整回答
反對 回復 2022-06-12
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我用這個。該演示帶有樣式切換實現。你可以看一下這個例子,看看它是如何工作的,它都是開源的。



查看完整回答
反對 回復 2022-06-12
  • 3 回答
  • 0 關注
  • 406 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號