【问题标题】:How do I change the color of a selected item on a ListView?如何更改 ListView 上选定项目的颜色?
【发布时间】:2015-12-06 00:57:08
【问题描述】:

我正在创建一个 ListView,它在 ViewCell 中有一些简单的项目。

当我选择其中一项时,它变为橙色。当我单击并按住(打开上下文操作)时,它变成白色...

<ListView ItemsSource="{Binding Items}" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.ContextActions>
                    <MenuItem Text="Delete" />
                </ViewCell.ContextActions>
                <StackLayout Orientation="Horizontal" Padding="20">
                    <StackLayout HorizontalOptions="StartAndExpand">
                        <Label Text="{Binding Name}" FontSize="Large" FontAttributes="Bold" />
                        <Label Text="{Binding Description}" />
                    </StackLayout>
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

如何自定义这些颜色?

【问题讨论】:

  • 我花了很多时间寻找自定义所选项目颜色的解决方案 - 没有成功。 SO 和 Xamarin 论坛上有一些解决方法,但没有一个让我高兴,或者他们根本不起作用。过了一会儿,我决定在触发相应的事件后立即删除选定的项目状态,并改为更改项目的文本颜色以标记选定的项目。
  • @Wosi 嘿,看看我的回答,可能对你有用:)

标签: c# android xamarin xamarin-forms


【解决方案1】:

我发现我必须直接在Android上自定义它。

要使用我更改的主题Droid/Properties/AssemblyInfo.cs 添加:

[assembly: Application(Theme = "@style/AppStyle.Light")]

我在以下位置创建了一些文件:

机器人\资源\值

colors.xml 包含我的主题的颜色定义:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <color name="ListViewSelected">#96BCE3</color>
  <color name="ListViewHighlighted">#E39696</color>
</resources>

styles.xml 包含主题设置:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="AppStyle.Light" parent="android:style/Theme.Material.Light.DarkActionBar">
    <item name="android:colorPressedHighlight">@color/ListViewSelected</item>
    <item name="android:colorLongPressedHighlight">@color/ListViewHighlighted</item>
    <item name="android:colorFocusedHighlight">@color/ListViewSelected</item>
    <item name="android:colorActivatedHighlight">@color/ListViewSelected</item>
    <item name="android:activatedBackgroundIndicator">@color/ListViewSelected</item>
  </style>
</resources>

使用这些名称我可以更改列表视图样式。

android:colorPressedHighlight
android:colorLongPressedHighlight
android:colorFocusedHighlight
android:colorActivatedHighlight
android:activatedBackgroundIndicator

参考资料可以在developer.android.com R.attr找到

【讨论】:

  • 投反对票,因为它是一个仅限 Android 的解决方案,它没有回答问题。
  • 也许你的问题已经解决了,但我会回答我的 iOS 解决方案:我创建了一个ViewCellRenderer,覆盖了UIKit.UITableViewCell GetCell 函数,并将SelectionStyle 设置为None。如果有人感兴趣,我可以发送详细的示例代码。
  • 我很感兴趣,你能给我一个示例代码吗?
【解决方案2】:

聚会迟到但问题已在CollectionViewhttps://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/collectionview/selection#change-selected-item-color解决

    <ContentPage.Resources>
        <Style TargetType="Grid">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal" />
                        <VisualState x:Name="Selected">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor"
                                        Value="LightSkyBlue" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>
        </Style>
    </ContentPage.Resources>

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多