在使用DynamicResource扩展时,是否有一种定义转换器的方法?行文中的某物
<RowDefinition Height="{Binding Source={DynamicResource someHeight}, Converter={StaticResource gridLengthConverter}}" />不幸的是,这给了我以下的解释:
A 'DynamicResourceExtension‘不能设置为“绑定”类型的“源”属性。“DynamicResourceExtension”只能设置在DependencyObject.
的DependencyProperty上。
发布于 2014-06-15 06:59:01
我知道我真的迟到了,但真正有效的是像这样为DynamicResource使用一个DynamicResource
<my:BindingProxy x:Key="someHeightProxy" Data="{DynamicResource someHeight}" />然后将转换器应用于代理。
<RowDefinition Height="{Binding Source={StaticResource someHeightProxy}, Path=Data, Converter={StaticResource gridLengthConverter}}" />发布于 2011-01-26 14:14:08
试着做这样的事:
标记扩展:
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:
<RowDefinition Height="{my:DynamicResourceWithConverter someHeight, Converter={StaticResource gridLengthConverter}}" />发布于 2015-11-20 00:18:01
@Thomas的帖子非常接近,但正如其他人所指出的,它只在执行MarkupExtension时执行。
这里有一个解决方案,它可以执行真正的绑定,不需要“代理”对象,并且与任何其他绑定一样编写,除了一个源和路径之外,您给它一个资源密钥.
How do you create a DynamicResourceBinding that supports Converters, StringFormat?
https://stackoverflow.com/questions/4805351
复制相似问题