2011-05-09 54 views
2

我注意到它可能返回就像从一个值转换器和绑定的魔力“可见”,“晕倒”,“图像/ xyz.png”或“#FFB3D1”管理,以数字的字符串出来。隐藏/显示UI元素,找到xyz.png图像或彩色的东西粉红...XAML自动类型转换

我已经采取了这种理所当然的很长一段时间,现在它不与我最新的代码打交道,所以我的问题是我该如何手动调用此功能?


说明:

我已经通过创建一个自定义的MarkupExtension,它附加一个多转换它连接到一个MultiBinding并返回初始化结合扩大规模。但是,当这个多转换器返回像“#FFB3D1”或“红色”的字符串时,似乎没有任何事情发生。

// 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 +转换器,它的地方跳过的步骤在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); 
     } 

据然后简单地应用了类型转换器的情况下手动

+1

的类型转换器的属性也可以在属性的类型声明,例如,在刷类本身。你可能希望你的代码也在那里检查。 – foson 2011-05-10 15:34:41

回答