我对WPF很新,所以这可能是一个简单的问题。
我有ListBox与定义的样式,字体和整个其余的东西。我想在那里突出显示一行,但问题是所有行都是以编程方式添加的,所以我不能只编辑行属性并更改例如前景collor(这就足够了)。我知道目标行ID,但我找不到任何方法来访问其ListItemBox对象。要访问我使用的特定项目:
((MyClass)(Playlist.Items[i])).MyProperty = 0; //Access the i element of ListBox named Playlist
甚至可能吗?我在这里和其他网站上搜索了解决方案,但在我的情况下没有任何帮助。
感谢您的帮助。
编辑: 我不是要选择行,而是要改变它的前景色。
答案 0 :(得分:2)
您可以使用DataTemplate和DataTrigger。您的DataTemplate定义了列表框中每个项目的外观(TextBlock,Image等)。 DataTrigger将标记列表框中每个项目的特定数据条件,并相应地更改DataTemplate的样式(如前景色)。这假设您的ListBox被数据绑定到MyClass的集合,其中包含名为MyProperty的属性。
<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
答案 1 :(得分:0)
使用Blend设计SCRATCH中的列表框控件模板,它将帮助您更改列表框中所选项目的前景色。此外,Blend是WPF UI设计的绝佳工具,请检查它。
答案 2 :(得分:0)
如果您无法为此实施适当的MVVM解决方案,则可以从ListBoxItem
的{{1}}属性获取Items
。如果ListBox
是数据绑定的(使用ListBox
属性),则自动生成的每个ItemsSource
都将其ListBoxItem
属性设置为集合中的项绑定到DataContext
属性。你可以在那里评估它。但是,我不推荐这种方法。如果可能,请使用适当的MVVM解决方案。
ItemsSource