首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin布尔Bindable性质

Xamarin布尔Bindable性质
EN

Stack Overflow用户
提问于 2020-09-23 08:56:27
回答 2查看 234关注 0票数 0

我试图使点击图标,这将使用愿望列表,为此,我已经创建了布尔属性,将返回图像。

这是我的代码,但它不支持onClick事件,请建议解决这个问题。

代码语言:javascript
复制
  public class WishIconImg : Image, IDisposable
    {

        static FontImageSource unselected_source = new FontImageSource();
        static FontImageSource selected_source = new FontImageSource();

        public WishIconImg()
        {
            unselected_source.FontFamily = "FA-S";
            unselected_source.Glyph = "\U000f02d5";
            unselected_source.Color = Color.DarkOrange;

            selected_source.FontFamily = "FA-S";
            selected_source.Glyph = "\U000f02d1";
            selected_source.Color = Color.DarkOrange;



           OnClick += Checkbox_OnClick;

        }

        public static BindableProperty IsCheckedProperty = BindableProperty.Create(
            nameof(IsChecked), typeof(bool), typeof(WishIconImg), defaultBindingMode: BindingMode.TwoWay,
            propertyChanged: IsCheckedChanged);

        public bool IsChecked
        {
            get { return (bool)GetValue(IsCheckedProperty); }
            set { SetValue(IsCheckedProperty, value); }
        }

        private static void IsCheckedChanged(BindableObject bindable, object oldValue, object newValue)
        {

            var cb = (WishIconImg)bindable;
            if (cb == null)
                return;

            if ((bool)newValue)
            {
                cb.Source = selected_source;
            }
            else
            {
                cb.Source=unselected_source ;
            }



        }

       void Checkbox_OnClick(object sender, EventArgs e)
        {
            IsChecked = !IsChecked;

        }

        public void Dispose()
        {
            OnClick -= Checkbox_OnClick;
        }



    }
}

Xaml

代码语言:javascript
复制
 <controls:WishIconImg   x:Name="HeartChk" IsChecked="{Binding AddWish, Mode=TwoWay}" HeightRequest="35" WidthRequest="35"  HorizontalOptions="End"/>

即使我尝试过使用Label属性,但它不起作用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-23 11:55:28

您可以修改类,如下所示

代码语言:javascript
复制
public WishIconImg()
        {
            unselected_source.FontFamily = "FA-S";
            unselected_source.Glyph = "\U000f02d5";
            unselected_source.Color = Color.DarkOrange;

            selected_source.FontFamily = "FA-S";
            selected_source.Glyph = "\U000f02d1";
            selected_source.Color = Color.DarkOrange;

            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += (s, e) => {
                // handle the tap

                IsChecked = !IsChecked;

            };
            this.GestureRecognizers.Add(tapGestureRecognizer);



        }
票数 1
EN

Stack Overflow用户

发布于 2020-09-23 09:42:57

尝试为单击事件添加TapGestureRecognizer

做这样的事

代码语言:javascript
复制
<StackLayout HeightRequest="35" WidthRequest="35"  HorizontalOptions="End">
    <controls:WishIconImg   x:Name="HeartChk" IsChecked="{Binding AddWish, Mode=TwoWay}" />
    <StackLayout.GestureRecognizers>
          <TapGestureRecognizer Command="{Binding Checkbox_OnClick}" /> 
    </StackLayout.GestureRecognizers>
</StackLayout>

在ViewModel中绑定它的命令

代码语言:javascript
复制
public System.Windows.Input.ICommand Checkbox_OnClick => new Xamarin.Forms.Command(Checkbox_OnClickTapped);

当您的视图被单击时,

Checkbox_OnClickTapped将被调用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64024390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档