我尝试绑定(bind)到 ImageView Alpha 属性,我创建了一个转换器来将其设置为 bool 值。但我不查看设定值。
这是我的转换器
public class BooleanToOpacity : MvxValueConverter<bool,int>
{
protected override int Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var boolean = value as bool?;
if (boolean.Value == true)
{
return 1;
}
else
{
return 127;
}
}
protected override bool ConvertBack(int value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value > 127)
{
return true;
}
else
{
return false;
}
}
}
我使用整数值,因为 Alpha 值是 0 到 255。
这是我的绑定(bind)值。
local:MvxBind="alpha TwitterPost, Converter=BooleanToOpacity" />
然后 Mvx 跟踪我
MvxBind:Warning: 11.56 Failed to create target binding for binding alpha for TwitterPost
[0:] MvxBind:Warning: 11.56 Failed to create target binding for binding alpha for TwitterPost
10-21 15:54:22.280 I/mono-stdout(12096): MvxBind:Warning: 11.56 Failed to create target binding for binding alpha for TwitterPost
有什么想法吗?
提前致谢。
最佳答案
Xamarin.Android 中没有可用于“Alpha”的 C# 属性,因此 Mvx 框架不知道如何绑定(bind)到它。
如果你愿意,你可以为此创建一个自定义绑定(bind)——比如:
public class ImageViewAlphaTargetBinding : MvxAndroidTargetBinding
{
public ImageViewAlphaTargetBinding (ImageView target) : base(target)
{
}
protected override void SetValueImpl(object target, object value)
{
var imageView = (ImageView)target;
imageView.SetMyProperty((int)value);
}
public override Type TargetType
{
get { return typeof(int); }
}
}
在 Setup.cs 中注册:
protected override void FillTargetFactories(Cirrious.MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
{
registry.RegisterCustomBindingFactory<ImageView>(
"Alpha",
v=> new ImageViewAlphaTargetBinding (v) );
base.FillTargetFactories(registry);
}
或者,您可以从 ImageView 继承并提供一个显示 Alpha
属性的自定义 View 。
有关这两个选项的更多信息,请参阅:
关于c# - 绑定(bind) Alpha Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19488966/