当我将标签添加到列表时,尝试从标签控制背景颜色

本文关键字:标签 控制 背景 颜色 添加 列表 | 更新日期: 2023-09-27 18:34:38

我正在尝试通过下面的代码控制背景颜色,但颜色没有像我想要的那样变成黑色。

我将列表中的公共颜色加载为透明,当它发现我想将其设置为黑色但似乎不起作用时。有什么线索我哪里出错了吗?

XAML:

<Label BackgroundColor="{Binding thebackgroundColor}" />

法典:

public class pubClass 
{
public Color thebackgroundColor { get; set; }
}
async void loadOurItem () 
{
ourList.Add (new pubClass () 
                { 
                    thebackgroundColor = Color.Transparent
                });
}

protected override void OnAppearing()
    {
            loadOurItem ();
            var theClass = new pubClass ();
            if (theClass.thebackgroundColor != null) {
                theClass.thebackgroundColor = Color.Black;
            }
        }
    }

更新:

private void NotifyPropertyChanged(theClass.thebackgroundColor)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(theClass.thebackgroundColor = Color.Black));
    }
}

当我将标签添加到列表时,尝试从标签控制背景颜色

听起来您想通过调整模型来更新您的ListView项目,尽管您在此过程中遇到了困难并且有点困惑?

请尝试下面的示例,这是一个创建MyPubClass ObservableCollection的简单示例。

屏幕底部的按钮将显示如何通过修改每个项目并将这些更改反映在ListView上来直接更新模型。

在此示例中,每个项目只是循环显示颜色RedGreenBlue

MyViewCell类中,这是您最有可能创建类似于 XAML 的东西,通过实现BindableProperty的模型的 TheBackgroundColor 属性绑定到LabelsBackgroundColor属性。

例:-

StackLayout objStackLayout = new StackLayout()
{
    Orientation = StackOrientation.Vertical,
};
ListView objListView = new ListView();
objStackLayout.Children.Add(objListView);
objListView.ItemTemplate = new DataTemplate(typeof(MyViewCell));
ObservableCollection<MyPubClass> objItems = new ObservableCollection<MyPubClass>();
objListView.ItemsSource = objItems;
objItems.Add(new MyPubClass(Color.Red));
objItems.Add(new MyPubClass(Color.Green));
objItems.Add(new MyPubClass(Color.Blue));
Button objButton1 = new Button()
{
    Text = "Change Colors"
};
objButton1.Clicked+=((o2,e2)=>
{
    foreach (MyPubClass objItem in objItems)
    {
        if (objItem.TheBackgroundColor == Color.Red)
        {
            objItem.TheBackgroundColor = Color.Green;
        }
        else if (objItem.TheBackgroundColor == Color.Green)
        {
            objItem.TheBackgroundColor = Color.Blue;
        }
        else if (objItem.TheBackgroundColor == Color.Blue)
        {
            objItem.TheBackgroundColor = Color.Red;
        }
    }
});
objStackLayout.Children.Add(objButton1);

自定义视图单元格:-

public class MyViewCell
    : ViewCell
{
    public MyViewCell()
    {
        Label objLabel = new Label();
        objLabel.Text = "Hello";
        objLabel.SetBinding(Label.BackgroundColorProperty, "TheBackgroundColor");
        this.View  = objLabel;
    }
}

支持类:-

public class MyPubClass
    : Xamarin.Forms.View
{

    public static readonly BindableProperty TheBackgroundColorProperty = BindableProperty.Create<MyPubClass, Color>(p => p.TheBackgroundColor, default(Color));
    public Color TheBackgroundColor
    {
        get { return (Color)GetValue(TheBackgroundColorProperty); }
        set { SetValue(TheBackgroundColorProperty, value); }
    }

    public MyPubClass(Color pobjColor)
    {
        this.TheBackgroundColor = pobjColor;
    }
}