【问题标题】:How to set one resource color value (from ResourceKey) to another (SolidColorBrush)如何将一个资源颜色值(来自 ResourceKey)设置为另一个(SolidColorBrush)
【发布时间】:2011-06-10 18:48:20
【问题描述】:

我想为 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# 代码隐藏中完成。

我尝试过类似的方法:

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

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

我也试过这个:

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

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

非常感谢您的帮助!

【问题讨论】:

  • 这句话“但是没用。” 后面什么都没有让这里的很多人非常高兴。 (
  • 我真的不明白什么是问题 - 在“但它不起作用”之前我已经写了我尝试过的内容。
  • 详细描述“但它不起作用”的确切含义,否则我们无法为您提供帮助。
  • 您不需要知道问题是什么,您只需解释结果是什么、您的预期以及是否因此而发生任何异常或其他不需要的行为。
  • 我已经编写了代码 (Application.Current.Resources["MainColor"] = Infragistics.Windows.Ribbon.RibbonBrushKeys["RibbonGroupCollapsedNormalBorderDarkFillKey"];) 不工作...是不是足够?

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


【解决方案1】:

RibbonGroupCollapsedNormalBorderDarkFillKey,而不是画笔。画笔在资源字典中。您使用密钥来检索它。

鉴于此,并且您希望 FindResource("MainColor") 返回画笔而不是颜色,这应该可行:

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

【讨论】:

  • 非常感谢,它成功了(FindResource(Infragistics.Windows.Ribbon.RibbonBrushKeys.RibbonGroupCollapsedNormalBorderDarkFillKey);)!我只是不知道怎么弄到这把刷子。
【解决方案2】:

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 指向资源层次结构中使用的键,具体取决于您要添加该键的位置(即代码上下文)以及定义原始键的位置,您可以通过 FindResource 获取颜色:

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

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

【讨论】:

  • 我想为 Application.Current.Resources["MainColor"] 设置新颜色。我可以这样做: Application.Current.Resources["MainBackgroundColor"] = new SolidColorBrush(color);但我希望这种颜色来自 Infragistics.Windows.Ribbon.RibbonBrushKeys
  • 您的回答不能解决我的问题。我同意这可能是一个铸造问题。我将此问题视为如何从“RibbonGroupCollapsedNormalBorderDarkFillKey”中获取颜色,我可以将其设置为 Application.Current.Resources["MainColor"] = new SolidColorBrush(color);代替“颜色”。
  • 您还需要将其他资源转换为适当的东西,我省略了这一点,因为我不知道您的功能区资源返回什么。
  • 我更新了我的答案,你的键不应该是键名的字符串,而是键本身,在我的代码中,我假设右边的这个字典也返回一个 SolidColorBrush。
  • 添加了另一种方法,因为您命名的字典听起来很可疑,它不应该只包含键而不是任何画笔吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多