2013-06-11 36 views
0

對於WPF來說,我很新,所以這可能是一個簡單的問題。WPF - 在列表框中突出顯示一行

我有列表框與定義的樣式,字體和其餘的東西。我想突出顯示一行,但問題是所有行都以編程方式添加,因此我不能只編輯行屬性並更改前景collor(這足夠了)。我知道目標行ID,但我找不到任何方式來訪問它的ListItemBox對象。要訪問我使用的具體項目:

((MyClass)(Playlist.Items[i])).MyProperty = 0; //Access the i element of ListBox named Playlist 

這是可能的嗎?我在這裏和其他網站上搜索瞭解決方案,但對我而言沒有任何幫助。

感謝您的任何幫助。

編輯: 我不是故意選擇行,而是改變它的前景色。

+1

爲您的項目創建適當的Data Item模型,爲ListBoxItems創建適當的'DataTemplate'。 –

+0

我與@HighCore在這一個。如果您爲ListBox中的項目定義特定的View Model類,並且將ListBox的ItemSource綁定到這些項目的集合,則可以通過該集合來查找該項目,並且View Model項目類可以公開任何屬性它需要爲了支持你需要的綁定。 –

回答

0

設計從SCRATCH使用混合它的列表框控件模板將幫助您更改列表框中選定項目的前景色。 Blend也是WPF UI設計的絕佳工具,因此請檢查它。

+0

我不想更改所選項目的屬性 - 我知道如何執行此操作。我只需要使用其ID來更改項目的屬性。 –

2

您可以使用DataTemplate和DataTrigger。你的DataTemplate定義你希望你的列表框中的每個項目看起來像(TextBlock,Image等)。 DataTrigger將標記列表框中每個項目的特定數據條件,並相應地更改DataTemplate的樣式(如前景色)。這是假設你的ListBox是一個名爲MyProperty屬性的MyClass集合的數據綁定。

<DataTemplate> 
    <TextBlock Text="{Binding MyProperty}"/> 
<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=ID}"> 
     <DataTrigger.Value> 
      303216 
     </DataTrigger.Value> 
     <DataTrigger.Setters> 
     <Setter Property="Foreground" Value="Navy"/> 
     </DataTrigger.Setters> 
    </DataTrigger> 
</DataTemplate.Triggers> 

</DataTemplate> 

http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.triggers.aspx

+0

@kittyPL - 如果它對您有幫助,可以請標記爲正確的答案? – Darlene

0

如果不能完成這個正確的MVVM解決方案,可以從ListBoxItems財產得到ListBoxItem秒。如果ListBox已綁定數據(使用ItemsSource屬性),則自動生成的每個ListBoxItem將其DataContext屬性設置爲集合中綁定到ItemsSource屬性的項目。你可以在那裏評估它。但是,我不會推薦這種方法。如果可能,請使用適當的MVVM解決方案。

var id = ...; 

var item = (from ListBoxItem i in ListBox1.Items 
      let data = (MyClass) i.DataContext 
      where data.Id == id 
      select i).FirstOrDefault(); 
if (item != null) 
    item.Foreground = Brushes.Red;