我注意到它可能返回就像从一个值转换器和绑定的魔力“可见”,“晕倒”,“图像/ 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);
}
据然后简单地应用了类型转换器的情况下手动
的类型转换器的属性也可以在属性的类型声明,例如,在刷类本身。你可能希望你的代码也在那里检查。 – foson 2011-05-10 15:34:41