2012-06-11 50 views
2

我是Windows Phone 7开发新手。我需要创建一个非常类似于设置应用页面的页面。像这样的东西(但没有顶部的菜单,每个项目的潜台词):
http://dotnetapp.com/wp-content/uploads/2012/05/BadSettingsPage.pngWP7:造型列表框项目

到目前为止,我已经得到了与项目列表框,但点击的项目之一,该项目颜色改变,它没有像设置应用程序那样的“按钮”效果。

第一个问题是如何创建这个漂亮的按钮效果(注意,按下按钮时会根据点击位置进行倾斜)。

我的第二个问题是关于样式不同的项目。 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; 
    ... 

我需要以不同风格的物品,不管他们来自firstListsecondList,例如,如果产品从firstList它的颜色应该是蓝色的。

我认为应该使用StaticResource,但我不确定。也许我需要以某种方式包装字符串,以便它将有一个getter来定义它来自哪个列表。

谢谢。

+1

第一个问题的答案是TiltEffect,它是Windows Phone的Silverlight工具包的一部分。 –

+0

第二个问题是不同的 - 你是说你的'第二行'(上图中的拉丁文)是secondList,标题是firstList? –

+1

@WilliamMelani 10x,关于第二个评论:不,我只需要在每个项目中使用一个文本块,但是我需要根据它们是存在于“firstList”还是“secondList”中以不同的方式(不同的文本颜色)对其进行样式化 –

回答

1

问题1回答是(见威廉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()); 

之后创建您的列表项绑定TEX一个DataTemplate t转换为文本块,使用转换器将textblock的字体颜色转换为IsFromFirstList属性。

这段代码是从头脑写出来的,没有VS ...不太确定如果你可以复制粘贴没有问题,但它应该给你的想法;) 如果你需要帮助创建datatemplate和转换器告诉我!

编辑:

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

我会改变

public bool IsFromFirstList {get; set;} 

public Color WhatEverColor {get; set;} 

将其设置为虚拟机被创建时需要并将其绑定到任何你需要它。

希望它有帮助!

+0

同样,我对c#和xaml完全陌生。您的解决方案很简单,但我如何使用转换器将背景颜色绑定到'IsFromFirstList'属性? –

+0

编辑我的答案! –