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



我想将新颜色设置为Application。现在的资源["MainColor"]。我可以这样做:申请。现在的Resources["MainBackgroundColor"]=new SolidColorBrush(color);但我希望这个颜色来自Infrasgistics。Windows。带子RibbonBrushKeys

所以我想将值设置为:

Application.Current.Resources["MainColor"]

其定义为:

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

表单Infrastics功能区资源:

public static readonly ResourceKey RibbonGroupCollapsedNormalBorderDarkFillKey;

在XAML中,我会这样做:

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

但我需要在C#代码后台执行。

我试过这样的东西:

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

但它没有起作用。我希望从RibbonGroupCollapsedNormalBorderMarkFillKey中获取颜色值。

我也试过这个:

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

我以为它会改变颜色,它编译了,但当我点击这个按钮时,它什么都没改变。。。

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

RibbonGroupCollapsedNormalBorderDarkFillKey,而不是画笔。画笔在资源字典中。你用钥匙取回它。

考虑到这一点,并且考虑到您期望FindResource("MainColor")返回画笔而不是颜色,这应该是可行的:

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

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

应该是这样的:

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

编辑:由于您的资源显然确实存在,这是一个铸造的问题

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

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

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

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

最新更新