我是Windows Phone 7开发的新手。我需要创建一个与设置应用页面非常相似的页面。像这样的东西(但没有顶部的菜单和每个项目的子文本):
http://dotnetapp.com/wp-content/uploads/2012/05/BadSettingsPage.png
到目前为止,我已经有一个包含项目的列表框,但点击其中一个项目,项目颜色会发生变化,并且没有像设置应用程序那样的“按下按钮”效果。
第一个问题是如何创建这个漂亮的按钮效果(注意按下按钮时,根据点击的位置按下倾斜)。
我的第二个问题是关于不同的样式。 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
完成,但我不确定。也许我需要以某种方式包装字符串,以便它有一个getter来定义它来自哪个列表。
感谢。
答案 0 :(得分:1)
回答问题1(参见William Mekanis评论)
对于问题2,你有一个大问题...你绑定了一个字符串列表...没有变化,看看哪个项目来自哪个列表。 我会为我的DataSource列表创建类似于视图模型的东西。
像这样的东西(NotifyPropertyChanged在这里被忽略,如果需要的话也可以实现它,并且也使用ObservableCollection;)):
public class ListDataSourceViewModel
{
public string Text {get; set;}
public bool IsFromFirstList {get; set;}
}
如果您有更多列表,您还可以使用枚举或其他任何作为列表标识符...
您为DataSource创建了一个新列表,如:
lst.AddRange(firstList.Select(item => new ListDataSourceViewModel
{
Text = item, IsFromFirstList = true
}
).ToArray());
lst.AddRange(secondList.Select(item => new ListDataSourceViewModel
{
Text = item, IsFromFirstList = false
}
).ToArray());
然后为listitem创建一个datatemplate,将文本块绑定到文本块,使用转换器将文本块的字体颜色绑定到IsFromFirstList属性。
这段代码是从头脑中编写的,没有VS ...如果你可以复制粘贴而没有问题但不应该没问题,但它应该给你的想法;) 如果您需要帮助创建数据模板和转换器,请告诉我!
编辑:
我重新思考了我的建议......使用转换器,特别是(潜在的)大型列表,并不是一个好主意(从性能的角度来看)。在您的情况下,直接在viewmodel中使用所需的颜色无论如何都不是问题。
我会改变
public bool IsFromFirstList {get; set;}
到
public Color WhatEverColor {get; set;}
在创建VM时根据需要进行设置,并将其绑定到您需要的任何位置。
希望它有所帮助!