我注意到可以从值转换器中返回“Visible”,“Collapsed”,“Images / xyz.png”或“#FFB3D1”之类的字符串,并且绑定的魔力可以解决这个问题。隐藏/显示UI元素,找到xyz.png图像或粉红色的颜色......
我认为很长一段时间这是理所当然的,现在它不适用于我的最新代码,所以我的问题是如何手动调用此功能?
解释
我通过创建自定义MarkupExtension来扩展,它附加一个MultiConverter将它附加到MultiBinding并返回初始化的绑定。但是,当这个多转换器返回像“#FFB3D1”或“Red”这样的字符串时,似乎什么也没发生。
// PseudoCode from my MarkupExtension, setting up & returning the binding/multi-converter
public override object ProvideValue( IServiceProvider serviceProvider )
{
MultiBinding outputBinding = new MultiBinding();
foreach ( Binding b in bindings )
{
outputBinding.Bindings.Add( b );
}
outputBinding.Converter = converter;
return outputBinding.ProvideValue( serviceProvider );
}
我认为因为我在代码中创建Multibinding + Converter,它正在Binding.Magic
命名空间中的某个位置跳过。
解决方案:
public override object ProvideValue( IServiceProvider serviceProvider )
{
// get targets
IProvideValueTarget serv = (IProvideValueTarget)serviceProvider.GetService( typeof( IProvideValueTarget ) );
// get Type Converter
object[] typeConverterAttributes = ( (DependencyProperty)serv.TargetProperty ).PropertyType.GetCustomAttributes( typeof( TypeConverterAttribute ), true );
TypeConverter typeConverter = null;
if ( typeConverterAttributes.Length > 0 )
{
TypeConverterAttribute attr = (TypeConverterAttribute)typeConverterAttributes[0];
typeConverter = (TypeConverter)Activator.CreateInstance( Type.GetType( attr.ConverterTypeName ), false );
}
然后只是手动应用类型转换器的情况
答案 0 :(得分:3)
您所引用的魔力是由于框架使用了TypeConverter
属性。
如果这是您绑定的属性,也许您应该定义一个新的TypeConverter并使用TypeConverter属性修饰该属性。
答案 1 :(得分:1)
也许你可以试试BrushConverter。