簡體   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