我怎样才能使这个显示列表框?
我有一个实际显示两列数据的数据绑定列表框。它显示如下:我怎样才能使这个显示列表框?
<UserControl.Resources>
<DataTemplate x:Key="AlignedPairs">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Fruits}" Grid.Column="0" />
<TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
<TextBlock Text="{Binding Colors}" Grid.Column="3" />
</Grid>
</DataTemplate>
</UserControl.Resources>
<ListBox Name="lbStuff" Grid.ColumnSpan="2" Grid.Row="1"
ItemTemplate="{StaticResource AlignedPairs}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Then Then Itemsource set in codebehind。
但是,基于某种逻辑,我想在其中一列设置一行或一个项目,例如,一个红色的水果,或大胆的线。我有代码来确定我想在后面的代码中区分哪种水果或颜色(通过颜色/粗体),但我无法弄清楚,特别是在自定义列表框显示的情况下,我如何才能设置特定项目以不同的颜色/粗体显示。
有没有人有任何想法?
让我知道是否需要任何进一步的代码。干杯。
编辑:我真正想要做的就是让问题尽可能简单......循环遍历列表框中的每个项目,并检查一个字符串,如果有匹配项目SOMEHOW在视觉上区分这一点item list/listview中。没有必要把它做得比它需要的更复杂。为什么你无法单独设置项目前景色超出了我的想象!
编辑2:
它看起来像我几乎与下面那里(但它抛出异常,不能正常工作)
foreach (var li in ListView.Items)
{
if (someCriteria == true)
{
((ListViewItem) li).Foreground = Brushes.Red;
//exception throw as this is the actual object stored in this location (the Fruit object for example) not the row or listviewitem I want to change the color of so it can't be cast :(
}
}
这就是ViewModel设计模式真正帮助你的地方。
大概你有一个类暴露了属性Fruit
和Color
。创建一个封装类,公开这两个属性,并且还公开FruitBackgroundBrush
和ItemBackgroundBrush
。然后你可以绑定到你的模板中的属性,例如:
<DataTemplate x:Key="AlignedPairs">
<Grid Background={Binding ItemBackgroundBrush}>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Fruits}"
Background="{Binding FruitBackgroundBrush}"
Grid.Column="0" />
<TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
<TextBlock Text="{Binding Colors}" Grid.Column="3" />
</Grid>
</DataTemplate>
啊真棒!仍然完全了解数据绑定,这让事情变得如此简单。这是一个完美的解决方案,真正帮助我理解数据绑定的力量。非常感谢! – baron 2010-03-24 00:21:34
DataTriggers将照顾这。这里有一个好的底漆:http://en.csharp-online.net/WPF_Styles_and_Control_Templates%E2%80%94Data_Triggers
你的数据是如何建模的 - 水果是一个字符串,一个水果对象还是一个集合?什么信息控制显示,例如你有一个IsPrizeWinningFruit属性,你想显示为粗体,还是你需要基于它的名字,或什么? – itowlson 2010-03-23 01:20:13
水果和颜色都是对象,例如属性名称和代码。此屏幕显示两者之间的关系(水果和颜色)。有三个文本文件fruit.txt,color.txt和relationship.txt。应用程序有三个屏幕 - 水果,颜色和关系。 Frut可以添加删除水果。颜色添加删除颜色。关系 - 可以将两者联系起来。试图在这个屏幕上显示两件事情 - 如果一个水果处于关系中但是从fruit.txt中缺失,而相反,如果fruit处于fruit.txt中但不处于relationship.txt中。我已经用另一个列表框显示第二个例子。 – baron 2010-03-23 02:15:09