C# 如何将一个资源颜色值(从ResourceKey)设置为另一个(SolidColorBrush)

C# 如何将一个资源颜色值(从ResourceKey)设置为另一个(SolidColorBrush),c#,wpf,xaml,c#-4.0,infragistics,C#,Wpf,Xaml,C# 4.0,Infragistics,我想为Application.Current.Resources[“MainColor”]设置新颜色。我可以这样做:Application.Current.Resources[“MainBackgroundColor”]=newsolidcolorbush(color);但我希望此颜色来自Infragistics.Windows.Ribbon.Ribbon笔刷 因此,我想将值设置为: Application.Current.Resources["MainColor"] 定义为: <Sol

我想为Application.Current.Resources[“MainColor”]设置新颜色。我可以这样做:Application.Current.Resources[“MainBackgroundColor”]=newsolidcolorbush(color);但我希望此颜色来自Infragistics.Windows.Ribbon.Ribbon笔刷

因此,我想将值设置为:

Application.Current.Resources["MainColor"]
定义为:

<SolidColorBrush x:Key="MainColor" Color="#FFEAF2FB" />
在XAML中,我会这样做,例如:

<Setter Property="BorderBrush" TargetName="border1" Value="{DynamicResource {x:Static igRibbon:RibbonBrushKeys.RibbonGroupCollapsedNormalBorderDarkFillKey}}"/>
但它不起作用。我期望从RibbonGroup CollapsedNormalBorderDarkFillkKey获取颜色值

我也试过:

Application.Current.Resources["MainColor"] = Application.Current.Resources["Infragistics.Windows.Ribbon.RibbonBrushKeys.RibbonGroupCollapsedNormalBorderDarkFillKey"];
我以为它会改变颜色,但当我点击这个按钮时,它什么也没改变


非常感谢您的帮助

Application.Current.Resources[“MainColor”]=…
将对象存储在键
“MainColor”
中,前提是该键已经存在。要使用该键添加新资源,请使用
Resources.add(键,对象)

应该是这样的:

Application.Current.Resources.Add("MainColor", Infragistics.Windows.Ribbon.RibbonBrushKeys["RibbonGroupCollapsedNormalBorderDarkFillKey"]);
编辑:由于您的资源显然存在,这是一个问题

XAML指向资源层次结构中使用的键,这取决于要添加该键的位置(即代码上下文)以及原始键的定义位置,您可能可以通过
FindResource
获得颜色:

(Application.Current.Resources["MainColor"] as SolidColorBrush).Color =
    (FindResource(Infragistics.Windows.Ribbon.RibbonGroupCollapsedNormalBorderDarkFillKey) as SolidColorBrush).Color;

或者,您可以使用从其他资源加载颜色的新笔刷覆盖整个笔刷。请注意,在这两种情况下,此更改都是通过值进行的,如果其中一个资源更改,则另一个不会受到影响。

Application.Current.Resources[“MainColor”]=…
将对象存储在键
“MainColor”
中,前提是该键已存在。要使用该键添加新资源,请使用
Resources.add(键,对象)

应该是这样的:

Application.Current.Resources.Add("MainColor", Infragistics.Windows.Ribbon.RibbonBrushKeys["RibbonGroupCollapsedNormalBorderDarkFillKey"]);
编辑:由于您的资源显然存在,这是一个问题

XAML指向资源层次结构中使用的键,这取决于要添加该键的位置(即代码上下文)以及原始键的定义位置,您可能可以通过
FindResource
获得颜色:

(Application.Current.Resources["MainColor"] as SolidColorBrush).Color =
    (FindResource(Infragistics.Windows.Ribbon.RibbonGroupCollapsedNormalBorderDarkFillKey) as SolidColorBrush).Color;

或者,您可以使用从其他资源加载颜色的新笔刷覆盖整个笔刷。请注意,在这两种情况下,此更改都是通过值进行的,如果其中一个资源更改,则另一个不会受到影响。

RibbongGroup CollapsedNormalBorderDarkFillkKey是一个键,而不是画笔。笔刷位于资源字典中。您可以使用密钥来检索它

考虑到这一点,并且您希望
FindResource(“MainColor”)
返回画笔而不是颜色,这应该可以:

Application.Current.Resources["MainColor"] = FindResource(
   Ribbon.RibbonGroupCollapsedNormalBorderDarkFillKey);

Ribbongroup CollapsedNormalBorderDarkFillkKey
是一个键,而不是画笔。笔刷位于资源字典中。您可以使用密钥来检索它

考虑到这一点,并且您希望
FindResource(“MainColor”)
返回画笔而不是颜色,这应该可以:

Application.Current.Resources["MainColor"] = FindResource(
   Ribbon.RibbonGroupCollapsedNormalBorderDarkFillKey);

我想为Application.Current.Resources[“MainColor”]设置新颜色。我可以这样做:Application.Current.Resources[“MainBackgroundColor”]=newsolidcolorbush(color);但我希望此颜色来自Infragistics.Windows.Ribbon.Ribbon。您的回答无法解决我的问题。我同意这可能是演员的问题。我认为这个问题是如何从“RibbonGroupCollapsedNormalBorderDarkFillkKey”中获取颜色,我可以将其设置为Application.Current.Resources[“MainColor”]=new SolidColorBrush(颜色);代替“颜色”。您还需要将其他资源转换为适当的资源,我省略了这一点,因为我不知道您的ribbon资源返回了什么。我更新了我的答案,您的密钥不应该是密钥名称的字符串,而应该是密钥本身,在我的代码中,我假设右侧的字典也返回SolidColorBrush。添加了另一种方法,因为您命名的字典听起来很可疑,它不应该只包含键而不是任何画笔吗?我想将新颜色设置为Application.Current.Resources[“MainColor”]。我可以这样做:Application.Current.Resources[“MainBackgroundColor”]=newsolidcolorbush(color);但我希望此颜色来自Infragistics.Windows.Ribbon.Ribbon。您的回答无法解决我的问题。我同意这可能是演员的问题。我认为这个问题是如何从“RibbonGroupCollapsedNormalBorderDarkFillkKey”中获取颜色,我可以将其设置为Application.Current.Resources[“MainColor”]=new SolidColorBrush(颜色);代替“颜色”。您还需要将其他资源转换为适当的资源,我省略了这一点,因为我不知道您的ribbon资源返回了什么。我更新了我的答案,您的密钥不应该是密钥名称的字符串,而应该是密钥本身,在我的代码中,我假设右边的字典也返回SolidColorBrush。添加了另一种方法,因为你命名的字典听起来很可疑,它不应该只包含键而不是任何画笔吗?单词“但它不起作用。”后面没有任何内容会让这里的很多人非常高兴。(我真的不明白什么是问题——在“但它不起作用”之前,我已经写下了我尝试过的东西。请详细描述你所说的“但它不起作用”是什么意思)否则我们无法帮助您。您不需要知道问题出在哪里。您只需解释结果是什么,您期望得到什么,以及是否因此发生任何异常或其他不必要的行为。我已经编写了代码(Application.Current.Resources[“MainColor”]=Infragistics.Windows.Ribbon.RibbonBrushKeys)[“RibbonGroupCollapsedNormalBorderDarkFillKey”];)这不起作用……不是吗?后面的“但它不起作用”这几个字让这里的很多人都很高兴。(我真的不明白问题出在“但它不起作用”之前,我已经写了我尝试过的东西。请详细描述你所说的“但它不起作用”的意思