如何设置一个资源颜色值(从ResourceKey)到另一个(SolidColorBrush)

时间:2011-06-10 18:48:20

标签: c# wpf xaml c#-4.0 infragistics

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

所以我想将值设置为:

Application.Current.Resources["MainColor"]

定义为:

<SolidColorBrush x:Key="MainColor" Color="#FFEAF2FB" />

表格Infragistics Ribbon资源:

public static readonly ResourceKey RibbonGroupCollapsedNormalBorderDarkFillKey;

在XAML中我会这样做:

<Setter Property="BorderBrush" TargetName="border1" Value="{DynamicResource {x:Static igRibbon:RibbonBrushKeys.RibbonGroupCollapsedNormalBorderDarkFillKey}}"/>

但我需要在C#codebehind中完成。

我尝试过类似的事情:

Application.Current.Resources["MainColor"] = Infragistics.Windows.Ribbon.RibbonBrushKeys["RibbonGroupCollapsedNormalBorderDarkFillKey"];

但它没有用。我除了从RibbonGroupCollapsedNormalBorderDarkFillKey获取颜色值。

我也试过这个:

Application.Current.Resources["MainColor"] = Application.Current.Resources["Infragistics.Windows.Ribbon.RibbonBrushKeys.RibbonGroupCollapsedNormalBorderDarkFillKey"];

我认为它会改变颜色,它会被编译,但是当我点击这个动作的按钮时它什么也没改变......

这里的任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:3)

RibbonGroupCollapsedNormalBorderDarkFillKey,而不是画笔。画笔位于资源字典中。您可以使用该键来检索它。

鉴于此,鉴于您期望FindResource("MainColor")返回画笔而不是颜色,这应该有效:

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

答案 1 :(得分:1)

Application.Current.Resources["MainColor"] = ...将您的对象存储在密钥"MainColor"中,如果该密钥已存在那么。要使用该密钥添加新资源,请使用Resources.Add(key,object)

应该是这样的:

Application.Current.Resources.Add("MainColor", Infragistics.Windows.Ribbon.RibbonBrushKeys["RibbonGroupCollapsedNormalBorderDarkFillKey"]);

修改:由于您的资源显然存在,因此casting

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

您XAML指向资源层次结构中使用的密钥,具体取决于您要添加该密钥的位置(即代码上下文)以及定义原始密钥的位置,您可以通过{{1 }}:

FindResource

或者,您可以使用从其他资源加载颜色的新画笔覆盖整个画笔。请注意,在这两种情况下,此更改均按按值完成,如果任一资源发生更改,则 受影响。