[英]WP7: Styling ListBox items
我是Windows Phone 7开发的新手。 我需要创建一个与设置应用程序页面非常相似的页面。 这样的事情(但没有顶部的菜单和每个项目的子文本):
(来源: dotnetapp.com )
到目前为止,我已经有了一个包含项目的列表框,但是单击其中一个项目,项目颜色会更改,并且没有设置应用程序所具有的“按下按钮”效果。
第一个问题是如何创建漂亮的按钮效果(请注意,按下按钮时,按钮会倾斜,具体取决于点击的位置)。
我的第二个问题是关于不同样式的项目。 listBox的ItemsSource
的定义如下:
List<string> firstList;
List<string> secondList;
public MainPage()
{
...
List<string> lst = new List<string>();
lst.AddRange(firstList);
lst.AddRange(secondList);
listBox1.ItemsSource = lst;
...
我需要以不同的方式设置项目的样式,无论它们来自firstList
还是secondList
,例如,如果项目来自firstList
其颜色应为蓝色。
我认为应该使用StaticResource
完成此操作,但我不确定。 也许我需要以某种方式包装字符串,以便它具有用于定义它来自哪个列表的吸气剂。
谢谢。
回答了问题1(请参阅William Mekanis的评论)
对于问题2,您有一个大问题...您要绑定一个字符串列表...无需更改即可查看哪个项目来自哪个列表。 我将为数据源列表创建类似视图模型的内容。
像(NotifyPropertyChanged在这里被忽略,如果需要的话可以实现它,也可以使用ObservableCollection;)):
public class ListDataSourceViewModel
{
public string Text {get; set;}
public bool IsFromFirstList {get; set;}
}
如果您有更多列表,也可以使用枚举或任何其他作为列表标识符...
您为数据源创建一个新列表,例如:
lst.AddRange(firstList.Select(item => new ListDataSourceViewModel
{
Text = item, IsFromFirstList = true
}
).ToArray());
lst.AddRange(secondList.Select(item => new ListDataSourceViewModel
{
Text = item, IsFromFirstList = false
}
).ToArray());
然后,为您的列表项创建一个数据模板,使用转换器将文本绑定到文本块,并将文本块的字体颜色绑定到IsFromFirstList属性。
这段代码是从头脑里写出来的,没有VS ...如果您可以毫无问题地复制粘贴内容,请不要犹豫,但这应该可以给您带来帮助;)如果您在创建datatemplate和转换器时需要帮助,请告诉我!
编辑:
我重新考虑了我的建议...使用转换器(特别是在(潜在的)大型列表中)不是一个好主意(从性能的角度来看)。 在您的情况下,直接在视图模型中使用所需的颜色绝对不是问题。
我会改变
public bool IsFromFirstList {get; set;}
至
public Color WhatEverColor {get; set;}
在创建VM时根据需要进行设置,并将其绑定到您需要的任何位置。
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.