我注意到可以从值转换器返回“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 );
}
Run Code Online (Sandbox Code Playgroud)
我认为因为我正在代码中创建多重绑定+转换器,所以它跳过了命名空间中某处的步骤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 );
}
Run Code Online (Sandbox Code Playgroud)
这只是手动应用类型转换器的情况
您所指的魔法是由于框架对该TypeConverter属性的使用。
如果这是您要绑定到的自己的属性,则也许您应该定义一个新的 TypeConverter 并使用 TypeConverter 属性来装饰该属性。
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |