Xamarin绑定属性报错:'FadableImageControl'未找到'FadePropertyOf'属性
问题分析与解决
核心错误
你的XAML代码存在两个关键问题:
- 误用了BindableProperty的字段名
FadePropertyOfProperty,而非对应的CLR属性名FadePropertyOf FadePropertyOf是bool类型,不能赋值为空字符串,必须传入合法布尔值(True/False)
修正后的XAML代码
<?xml version="1.0" encoding="UTF-8" ?> <ContentPage x:Class="animations.Views.MyPageInitComp" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:bindables="clr-namespace:animations.Views.Bindables"> <ContentPage.Content> <StackLayout Padding="20" BackgroundColor="Pink"> <StackLayout Padding="20" BackgroundColor="DeepPink"> <!-- 修正属性名,并给bool类型属性赋值合法值 --> <bindables:FadableImageControl FadePropertyOf="False" ImageSourceOf="ino.png" Opacity="0" /> </StackLayout> </StackLayout> </ContentPage.Content>
可选优化:强类型BindableProperty创建方式
为避免字符串硬编码导致的拼写错误,建议使用泛型重载创建BindableProperty,更安全易维护:
// 替换原有FadePropertyOfProperty定义 public static readonly BindableProperty FadePropertyOfProperty = BindableProperty.Create( nameof(FadePropertyOf), // 使用nameof获取属性名,避免拼写错误 typeof(bool), typeof(FadableImageControl), defaultValue: false, defaultBindingMode: BindingMode.TwoWay, propertyChanged: async (BindableObject bindable, object oldValue, object newValue) => { var myControl = bindable as FadableImageControl; var opacityControl = myControl?.fadableImage; if (opacityControl == null) return; if (opacityControl.Opacity == 0) { await opacityControl.FadeTo(1, 100); } else { await opacityControl.FadeTo(0, 100); } });
额外注意事项
- 确保控件XAML文件(
FadableImageControl.xaml)中fadableImage命名控件存在且命名正确,否则propertyChanged事件会触发空引用异常 ImageSourceProperty也可改为泛型重载风格,统一代码规范:
public static readonly BindableProperty ImageSourceProperty = BindableProperty.Create(nameof(ImageSourceOf), typeof(ImageSource), typeof(FadableImageControl));
内容的提问来源于stack exchange,提问作者E.Rawrdríguez.Ophanim
相关产品推荐
相关产品推荐

