c# - 绑定(bind) Alpha Android

标签 c# android mvvmcross

我尝试绑定(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/

相关文章:

c# - 如何在 C# 中从 mongo 过滤时仅比较 dateTime 的日期?

c# - 如何在转发器中使用复选框列表?

c# - ASP.NET MVC C# Razor SQL 1 of 2 几乎相同的更新查询不起作用

java - 有没有更有效的方法来更新 ListView 或循环遍历字符串数组

android - Android 项目的 Eclipse Gradle 导出不执行任何操作

android - 在 Android Spinner 中设置文本颜色

android - MvvmCross AutoView 动态对话框部分

c# - 将可观察的路径集合转换为文件名集合

c# - 在 MvvmCross 中使用 MvxGridView

iphone - MvvmCross:GestureRecognized 绑定(bind)到 ViewModel 操作