XAML中的类属性声明

时间:2018-07-22 19:47:55

标签: xaml xamarin

我对XAML名称空间声明感到困惑。 请帮助澄清我的情况。我在CoTraveller名称空间中有BooleanToObjectConverter类:IValueConverter:

return new Proxy(context, handler) as IFunction;

}

我想在App资源中使用FalseObject和TrueObject属性,例如:

evaluate()

但是有错误:严重级代码描述项目文件行抑制状态 错误XLS0415在类型'BooleanToObjectConverter'中找不到可连接属性'FalseObject'。 CoTraveller App.xaml 11

出什么问题了?

1 个答案:

答案 0 :(得分:0)

从DependencyObject派生以便能够使用可绑定的DependencyProperties:

public class BooleanToObjectConverter: DependencyObject, IValueConverter
{
    public Image FalseObject
    {
        get
        {
            return (Image)GetValue(FalseObjectProperty);
        }
        set
        {
            SetValue(FalseObjectProperty, value);
        }
    }

    public static readonly DependencyProperty FalseObjectProperty =
        DependencyProperty.Register(
            "FalseObject", 
            typeof(Image), 
            typeof(BooleanToObjectConverter<Image>), 
            new PropertyMetadata(null));

    public Image TrueObject
    {
        get
        {
            return (Image)GetValue(TrueObjectProperty);
        }
        set
        {
            SetValue(TrueObjectProperty, value);
        }
    }

    public static readonly DependencyProperty TrueObjectProperty =
        DependencyProperty.Register(
            "TrueObject",
            typeof(Image), 
            typeof(BooleanToObjectConverter<Image>), 
            new PropertyMetadata(null));

    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        return (bool)value ? this.TrueObject : this.FalseObject;
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        return ((Image)value).Equals(this.TrueObject);
    }
}

侧面说明:在这里使用泛型没有多大意义,因此我将其删除。

如果最初的意图是使用实际的泛型类型,请参见:Generic Type in Xaml Resources,因为为资源字典中的条目指定泛型类型参数不是很简单。