2

我是 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,但我不确定。也许我需要以某种方式包装字符串,以便它有一个 getter 来定义它来自哪个列表。

谢谢。

4

1 回答 1

1

问题 1 已回答(见 William Mekanis 评论)

对于问题 2,你有一个大问题......你正在绑定一个字符串列表......没有改变来查看哪个项目来自哪个列表。我会为我的数据源列表创建类似于视图模型的东西。

类似(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());

然后使用转换器为您的列表项创建一个数据模板,将文本绑定到文本块,并将文本块的字体颜色绑定到 IsFromFirstList 属性。

这段代码是从脑海中编写的,没有 VS...如果您可以毫无问题地复制粘贴,则不舒尔,但它应该给您这个想法;)如果您在创建数据模板和转换器方面需要帮助,请告诉我!

编辑:

我重新考虑了我的建议......使用转换器,特别是(潜在的)大型列表,不是一个好主意(从性能的角度来看)。在您的情况下,直接在视图模型中使用所需的颜色无论如何都不是问题。

我会改变

public bool IsFromFirstList {get; set;}

public Color WhatEverColor {get; set;}

在创建 VM 时根据需要进行设置,并将其绑定到您需要的任何位置。

希望能帮助到你!

于 2012-06-12T07:18:44.817 回答