繁体   English   中英

WP7:设置列表框项目的样式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM