Windows Phone 8.1 中 ListView 中行的交替颜色

2023-11-21

我创建了一个 Windows Phone 8.1 运行时应用程序。

我正在使用ListView控件。

我想交替每个背景行的颜色。

搜索后我发现了这个链接以前的答案.

但这会导致标记错误。一方面,没有“AlternationCount”属性。我假设这是因为它不是 SilverLight 而是 RT?

如果有人可以给我发送一个链接,因为我正在努力寻找一个简单的例子。更好的是一个简单的代码示例将不胜感激。


我知道这个问题已经有一些很好的答案,但我只想提出一个想法,我认为它实施起来有点困难,但更容易使用。

该解决方案需要来自ListView's ItemContainerStyleSelector and a Behavior from 行为 SDK (XAML).

基本上,这个AlternatingColorItemContainerStyleSelector我创建的行为允许您指定两个SolidColorBrush颜色。它封装了创建的逻辑ItemContainerStyleSelector与两个不同的Styles 以及分配相应的SolidColorBrush每一个Style.

一旦你的行为到位,使用它就非常简单 - 我只需将它拖放到ListView在 Expression Blend 中指定两种颜色,就这样!

enter image description here

这是行为。

namespace Behaviors
{
    public class AlternatingColorItemContainerStyleSelector : StyleSelector
    {
        private Style _oddStyle = new Style { TargetType = typeof(ListViewItem) }, _evenStyle = new Style { TargetType = typeof(ListViewItem) };
        public Style OddStyle { get { return _oddStyle; } }
        public Style EvenStyle { get { return _evenStyle; } }

        protected override Style SelectStyleCore(object item, DependencyObject container)
        {
            var listViewItem = (ListViewItem)container;
            var listView = GetParent<ListView>(listViewItem);

            var index = listView.IndexFromContainer(listViewItem);

            if (index % 2 == 0)
            {
                return this.EvenStyle;
            }
            else
            {
                return this.OddStyle;
            }
        }

        public static T GetParent<T>(DependencyObject child) where T : DependencyObject
        {
            while (!(child is T))
            {
                child = VisualTreeHelper.GetParent(child);
            }

            return (T)child;
        }
    }

    public class ListViewAlternatingColorBehavior : DependencyObject, IBehavior
    {
        public DependencyObject AssociatedObject { get; set; }

        public Style SharedItemContainerStyle { get; set; }

        #region colors dp

        public SolidColorBrush OddBrush
        {
            get { return (SolidColorBrush)GetValue(OddBrushProperty); }
            set { SetValue(OddBrushProperty, value); }
        }

        public static readonly DependencyProperty OddBrushProperty =
            DependencyProperty.Register("OddBrush", typeof(SolidColorBrush), typeof(ListViewAlternatingColorBehavior), new PropertyMetadata(null));

        public SolidColorBrush EvenBrush
        {
            get { return (SolidColorBrush)GetValue(EvenBrushProperty); }
            set { SetValue(EvenBrushProperty, value); }
        }

        public static readonly DependencyProperty EvenBrushProperty =
            DependencyProperty.Register("EvenBrush", typeof(SolidColorBrush), typeof(ListViewAlternatingColorBehavior), new PropertyMetadata(null));

        #endregion

        public void Attach(DependencyObject associatedObject)
        {
            this.AssociatedObject = associatedObject;

            this.ApplyItemContainerStyleSelectors();
        }

        private void ApplyItemContainerStyleSelectors()
        {
            var itemContainerStyleSelector = new AlternatingColorItemContainerStyleSelector();

            if (this.SharedItemContainerStyle != null)
            {
                itemContainerStyleSelector.OddStyle.BasedOn = this.SharedItemContainerStyle;
                itemContainerStyleSelector.EvenStyle.BasedOn = this.SharedItemContainerStyle;
            }

            itemContainerStyleSelector.OddStyle.Setters.Add(new Setter { Property = Control.BackgroundProperty, Value = this.OddBrush });
            itemContainerStyleSelector.EvenStyle.Setters.Add(new Setter { Property = Control.BackgroundProperty, Value = this.EvenBrush });

            var listView = (ListView)this.AssociatedObject;
            listView.ItemContainerStyleSelector = itemContainerStyleSelector;
        }

        public void Detach()
        {
        }
    }
}

需要注意的一件事是,删除项目不会更新所有其他项目的颜色(仅仅是因为SelectStyleCore其他项目的不会被调用),添加项目会。但就你而言,这应该足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Phone 8.1 中 ListView 中行的交替颜色 的相关文章

随机推荐

  • 高效计算向量组合

    出于好奇 我正在研究一个研究问题 但我不知道如何对我想到的逻辑进行编程 让我向你解释一下 我有四个向量 例如 v1 1 1 1 1 v2 2 2 2 2 v3 3 3 3 3 v4 4 4 4 4 现在我想做的是将它们组合起来 即 v12
  • 如何在不同的 OpenCV 版本中使用 `cv2.findContours`?

    我正在尝试将 OpenCV 与 Python 结合使用 以便检测来自 Raspberry Pi 相机的实时视频源中的方块 但是 那cv2 GaussianBlur and cv2 Canny下面代码中的函数导致以下错误 类型错误 numpy
  • 我可以让 KnownNat n 来暗示 KnownNat (n * 3) 等吗?

    我正在处理这种形状的数据类型 使用V from linear type Foo n V n 3 Double gt Double 将其固定在n非常重要 因为我希望能够确保在编译时传递正确数量的元素 这是我的程序的一部分 已经运行良好 独立于
  • 如何使用 superagent 发送文件

    所以大约一个月前我问一个问题关于超级代理和发送文件 但根本没有得到任何回应 我仍然想知道如何做到这一点 因为我喜欢使用超级代理 我可以使用普通的 ajax 发送文件 var fd new FormData fd append file th
  • 如何在 AngularJS e2e 测试中测试拖放功能

    我正在尝试测试我的应用程序 我需要将小部件从一个位置移动到另一个位置 换句话说 我需要在端到端测试中测试拖放功能 我将如何测试这个 我也有同样的问题 对我来说 解决方案是遵循此处 Selenium 问题中的建议 https code goo
  • 加速 R 中 sapply 调用中使用的函数

    我有两个向量e and g 我想知道中的每个元素e中元素的百分比g那些更小 在 R 中实现这一点的一种方法是 set seed 21 e lt rnorm 1e4 g lt rnorm 1e4 mf lt function p v 100
  • p4命令相当于什么 svn status [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Perforce 树中查找未跟踪的文件 svn状态的模拟 我想知道什么 p4 命令可以显示哪些文件已更改 哪些文件未签入等 如果您正确使用 perforce p4 open 就是您要查找的内容
  • 名称的正则表达式

    刚刚开始探索正则表达式的 奇迹 作为一个从反复试验中学习的人 我真的很挣扎 因为我的试验引发了不成比例的错误 我的实验是在 PHP 中使用 ereg 进行的 反正 我分别处理名字和姓氏 但现在使用相同的正则表达式 到目前为止我有 A Z a
  • 升级 @types/angular 后出现“错误 TS2694:命名空间 'Angular' 没有导出成员 'xxx'”

    将 Angular 和 types Angular 版本升级到版本 1 6 x 后 我有很多 TS2694 错误 error TS2694 Namespace angular has no exported member material
  • 无法实例化活动 ComponentInfo 无法实例化类

    提前感谢所有关注这个问题的人 特别是那些尝试回答的人 这个网站对我帮助很大 我目前在 Android 4 2 2 应用程序中遇到以下错误 下面是日志猫 09 09 01 14 27 008 D dalvikvm 9008 newInstan
  • Xcode 编辑器中不再有快速帮助

    快速帮助在我的 Xcode 5 OS X 10 8 5 上为 5 0 2 中消失了 而不是应该弹出的小弹出窗口Opt Click快捷方式所显示的只是箭头图像 自从Xcode 5升级之后就这样了 有什么想法如何修复它 FWIW 事实上 文档集
  • Atom:使用 Rome 的 RSS 链接

    It is 受到推崇的添加到 RSS 2 0 我想知道是否有任何罗马模块可以添加此标签 就像他们为内容 媒体开发的那样 etc 博客文章将 Atom 链接添加到由 ROME 生成的 RSS 提要准确回答了这个问题 没有对 RSS 提要中的
  • 为什么模板函数仅基于返回类型在 C++ 上工作?

    据我所知 重载函数必须包含不同的参数 类型或计数 所以我认为模板函数不应该仅仅基于返回类型 但是下面的代码适用于GCC 6 3 0 include
  • 现在转换 API 已停止,有没有办法在 appengine/python 中将 PDF 文件转换为图像?

    现在既然谷歌转化API已停产 有没有办法将 PDF 文件转换为图像in GAE 特别是蟒蛇 好像有人有已经请求了这是 Google 发出的 但尚未采取任何行动 几年前共识这是不可能的吗 有什么新的东西可以帮助我吗 如果您阅读链接到的问题报告
  • 获取cout的精度

    我可以设置精度cout输出使用 cout precision precision value 我怎么能够get精度值 用于cout已经 我在中找不到任何其他相关功能cout 描述 我面临的相关问题是如何仅更改代码某些部分的 cout 精度
  • fabsf 是 C++11 中 std 命名空间的一部分吗?

    这一页https en cppreference com w cpp numeric math fabs提到std fabsf自 C 11 起可用 然而 当我使用 G 6 3 0 编译最简单的程序时 std fabsf 它说fabsf不是以
  • 如何播放长音频剪辑?

    我编写了一个简单的类来在简单的游戏中播放音频文件 它对于枪声或爆炸等小声音效果很好 但当我尝试将它用于背景音乐时 我收到此错误 无法分配剪辑数据 请求的缓冲区太大 我假设这意味着文件太大 但我该如何解决这个问题 来源 import java
  • 从 WSL 运行 Express 服务器(不支持 UNC 路径)

    我正在尝试从 VS Code 中的 WSL 终端运行 Express 服务器 但是 每当我运行命令时npm run dev我收到以下错误 wsl Ubuntu home simao legalize backend CMD EXE was
  • 具有其他项目依赖项的 Eclipse 插件项目

    我有一个 Eclipse 插件项目 它依赖于我的 Eclipse 工作区中的其他项目 在 Java Build Path gt Projects 选项卡下添加项目依赖项 并在 Order and Export 中选择项目后 我收到 java
  • Windows Phone 8.1 中 ListView 中行的交替颜色

    我创建了一个 Windows Phone 8 1 运行时应用程序 我正在使用ListView控件 我想交替每个背景行的颜色 搜索后我发现了这个链接以前的答案 但这会导致标记错误 一方面 没有 AlternationCount 属性 我假设这