首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ValueConverter返回StaticResource

使用ValueConverter返回StaticResource
EN

Stack Overflow用户
提问于 2012-08-02 21:03:07
回答 1查看 1.5K关注 0票数 6

我正在尝试为我的业务实体中的不同状态设置静态资源。我的想法是,我可以使用一个值转换器来获取业务实体,并根据算法返回相应的背景画笔。我希望资源是静态的,这样我就可以在设计器中设计它们,并手动切换它们,以便在开发过程中预览它的外观,但能够以编程方式使用它们。

我们的目标是做一些类似这样的事情:

代码语言:javascript
复制
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var data = value as DummyData;

        if (data == null)
            return null;

        //Find resources
        if (data.VarianceAmount >= 0)
            return StaticResources.HighBackground;
        else
            return StaticResources.LowBackground;
    }

如果静态资源是在层次结构中的page / control / framework元素中声明的,我如何从值转换器内部访问它?我已经将值转换器设置为DependencyObject,但我不确定如何从那里导航层次结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 22:09:57

诀窍是在创建时将所需的资源值传递给转换器。

例如,

代码语言:javascript
复制
  public class CustomColorConverter : IValueConverter
  {
     public SolidColorBrush HighBackground { get; set; }
     public SolidColorBrush LowBackground { get; set; }

     // remaining implementation...
  }

然后在您的Xaml资源部分,您可以像这样声明它(当然是使用您自己的资源):

代码语言:javascript
复制
<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" />

这具有可重用的优点。您可以使用新的key创建另一个实例,并定义不同的笔刷。

此外,这几乎可以适用于任何东西,而不仅仅是SolidColorBrushes;您还可以定义完整的样式或模板。

希望这能有所帮助。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11778009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档