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