如何在列表视图的项目中引用控件或视图-Xamarin Forms [英] How do I refer a control or view in an item of listview - xamarin forms

查看:159
本文介绍了如何在列表视图的项目中引用控件或视图-Xamarin Forms的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一种情况,例如,在ListView中,每个项目中都有两个Label和一个自定义的水平列表.

I have a scenario like, in a ListView I have two Labels and a custom made horizontal List in each item.

水平列表-滚动视图中水平方向的标签堆栈.

Horizontal List - stack of Labels in a ScrollView with orientation horizontal.

我需要的是,我想引用一个位于ListView特定项目的水平列表"内的标签,然后将水平列表"中的选定标签设置为粗体.有没有办法引用ListView项目的控件?

What I need is, I want to refer a Label which is inside the Horizontal List of a particular item of the ListView and make the selected Label from the Horizontal List to Bold. Is there a way to refer a control of ListView item?

下面是填充我的ListView的代码

Below is the code for filling my ListView

myListView = new ListView
{
    // Source of data items.
    ItemsSource = itemsource,
    HasUnevenRows = true,
    RowHeight = -1,

    ItemTemplate = new DataTemplate(() =>
    {
        Label label1 = new Label()
        {
            TextColor = Color.Black,
            HorizontalTextAlignment = TextAlignment.Start,
            FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
        };
        label1.SetBinding<LVItem>(Label.TextProperty, indexer => indexer.Name);

        Label label2 = new Label()
        {
            TextColor = Color.Black,
            HorizontalTextAlignment = TextAlignment.Start,
            FontSize = Device.GetNamedSize(NamedSize.Small, new Label())
        };
        label2.SetBinding<LVItem>(Label.TextProperty, indexer => indexer.SelectedNum);

    //horizontal list
        StackLayout sLayout = new StackLayout()
        {
            Orientation = StackOrientation.Horizontal,
        };

        for (int i = 0; i<itemLst.Count; i++)
        {
            Label label3 = new Label()
            {
                HorizontalTextAlignment = TextAlignment.Center,
                TextColor = Color.Black,
                FontSize = Device.GetNamedSize(NamedSize.Medium, new Label())
            };
            label3.Text = itemLst[i];

            gestureRecognizer = new TapGestureRecognizer
            {
                Command = new Command(TapL_Tapped),
                CommandParameter = label3,
            };

            label3.GestureRecognizers.Add(gestureRecognizer);

            sLayout.Children.Add(label3);
        }

        ScrollView scroll = new ScrollView
        {
            Orientation = ScrollOrientation.Horizontal,
            Content = new StackLayout
            {
                Children =
                {
                    sLayout
                }
            }
        };


        AbsoluteLayout layout = new AbsoluteLayout();
        AbsoluteLayout.SetLayoutFlags(label1, AbsoluteLayoutFlags.All);
        AbsoluteLayout.SetLayoutBounds(label1, new Rectangle(0.2, 0.2, 0.8, 0.25));

        AbsoluteLayout.SetLayoutFlags(scroll, AbsoluteLayoutFlags.All);
        AbsoluteLayout.SetLayoutBounds(scroll, new Rectangle(0.3, 0.6, 0.8, 0.2));

        AbsoluteLayout.SetLayoutFlags(label2, AbsoluteLayoutFlags.All);
        AbsoluteLayout.SetLayoutBounds(label2, new Rectangle(1.1, 0.3, 0.5, 0.2));

        layout.Children.Add(label1);
        layout.Children.Add(scroll);
        layout.Children.Add(label2);

        return new ViewCell
        {
            View = new StackLayout
            {
                Children =
                {
                    layout,
                }
            }
        };
    }
)};

推荐答案

您可以使用ItemTapped查找正在点击列表视图中的哪个项目.要使文本加粗,应在字体上使用绑定.然后在您的代码隐藏中,您可以切换该绑定的值,因此字体也会更改. 让我知道这是否对您有用!

You can use the ItemTapped to find which item of your listview is getting tapped. To get the text bold you should use a binding on your font. then in your codebehind you can switch the value of that binding and so will your font change. Let me know if this worked for you!

这篇关于如何在列表视图的项目中引用控件或视图-Xamarin Forms的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆