使用背景更改的多选列表视图

时间:2016-02-09 10:53:17

标签: c# android ios windows-phone xamarin.forms

参考我的previous question我想知道是否有任何方法可以改变列表项的背景颜色而不是使用开关控件?

我使用了一个开关控制来指示多个选择,但是使用开关控制我在某些平台上得到这个ON / OFF文本是不必要的,所以我正在寻找改变列表项背景的选项而不是切换控制。

2 个答案:

答案 0 :(得分:1)

只需更改列表项Grid的根目录BackgroundColor ViewCell

在您的代码中,您有: -

public WrappedItemSelectionTemplate()
            : base()
        {

            Grid objGrid = new Grid();
            objGrid.BackgroundColor = Color.Gray;

所以你已经将背景设置为Gray。

在视图模型中为Background Color创建另一个属性,并挂钩到正在切换的Switch。然后,您可以将视图模型设置为选择/不选择所需的适当颜色。

然后为绑定到此ViewModel属性的objGrid属性创建上面BackgroundColor的绑定。

但是,如果您关于删除Switch控件,则需要执行与之前描述的操作类似的操作。但是,您需要创建Switch并将其绑定到TapGestureRecognizer,而不是挂钩Grid切换事件处理程序,因此您可以根据需要更新ViewModel。

更新1 : -

要处理特定颜色的Grid背景颜色,是否应选择项目,您需要创建绑定到IValueConverter布尔属性的IsSelected以确定适当的颜色显示为Grid的背景。

public class BackGroundColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool)
        {
            if ((bool)value)
            {
                return Color.Green;
            }
            else
            {
                return Color.Gray;
            }
        }
        else
        {
            return Color.Gray;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

}

然后,您需要创建一个使用它的Binding,如下所示: -

objGrid.SetBinding(Grid.BackgroundColorProperty, "IsSelected", converter: new BackGroundColorConverter());

另外,要删除Switch,请注释以下三行: -

Switch mainSwitch = new Switch();
mainSwitch.SetBinding(Switch.IsToggledProperty, new Binding("IsSelected"));
objGrid.Children.Add(mainSwitch, 2, 0);

答案 1 :(得分:0)

是的,您可以通过在drawable中添加选择器并在XML的列表视图标记中使用android:listSelector="@drawable/list_selector_background"来更改列表项的背景。

示例选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_focused="false"
    android:drawable="@drawable/list_item_gradient" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
    android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
    android:drawable="@drawable/list_selector_background_disabled" />

<item android:state_focused="true" android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
    android:drawable="@drawable/list_selector_background_transition" />

<item android:state_focused="true"
    android:drawable="@drawable/list_selector_background_focus" />

根据状态按下,启用状态等不同状态相应地更改值。