首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IValueConverter和DynamicResource?

用IValueConverter和DynamicResource?
EN

Stack Overflow用户
提问于 2011-01-26 13:58:59
回答 4查看 14.1K关注 0票数 19

在使用DynamicResource扩展时,是否有一种定义转换器的方法?行文中的某物

代码语言:javascript
复制
<RowDefinition Height="{Binding Source={DynamicResource someHeight}, Converter={StaticResource gridLengthConverter}}" />

不幸的是,这给了我以下的解释:

A 'DynamicResourceExtension‘不能设置为“绑定”类型的“源”属性。“DynamicResourceExtension”只能设置在DependencyObject.

的DependencyProperty上。

EN

回答 4

Stack Overflow用户

发布于 2014-06-15 06:59:01

我知道我真的迟到了,但真正有效的是像这样为DynamicResource使用一个DynamicResource

代码语言:javascript
复制
<my:BindingProxy x:Key="someHeightProxy" Data="{DynamicResource someHeight}" />

然后将转换器应用于代理。

代码语言:javascript
复制
<RowDefinition Height="{Binding Source={StaticResource someHeightProxy}, Path=Data, Converter={StaticResource gridLengthConverter}}" />
票数 23
EN

Stack Overflow用户

发布于 2011-01-26 14:14:08

试着做这样的事:

标记扩展:

代码语言:javascript
复制
public class DynamicResourceWithConverterExtension : DynamicResourceExtension
{
    public DynamicResourceWithConverterExtension()
    {
    }

    public DynamicResourceWithConverterExtension(object resourceKey)
            : base(resourceKey)
    {
    }

    public IValueConverter Converter { get; set; }
    public object ConverterParameter { get; set; }

    public override object ProvideValue(IServiceProvider provider)
    {
        object value = base.ProvideValue(provider);
        if (value != this && Converter != null)
        {
            Type targetType = null;
            var target = (IProvideValueTarget)provider.GetService(typeof(IProvideValueTarget));
            if (target != null)
            {
                DependencyProperty targetDp = target.TargetProperty as DependencyProperty;
                if (targetDp != null)
                {
                    targetType = targetDp.PropertyType;
                }
            }
            if (targetType != null)
                return Converter.Convert(value, targetType, ConverterParameter, CultureInfo.CurrentCulture);
        }

        return value;
    }
}

XAML:

代码语言:javascript
复制
<RowDefinition Height="{my:DynamicResourceWithConverter someHeight, Converter={StaticResource gridLengthConverter}}" />
票数 4
EN

Stack Overflow用户

发布于 2015-11-20 00:18:01

@Thomas的帖子非常接近,但正如其他人所指出的,它只在执行MarkupExtension时执行。

这里有一个解决方案,它可以执行真正的绑定,不需要“代理”对象,并且与任何其他绑定一样编写,除了一个源和路径之外,您给它一个资源密钥.

How do you create a DynamicResourceBinding that supports Converters, StringFormat?

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

https://stackoverflow.com/questions/4805351

复制
相关文章

相似问题

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