我正在使用C#和Silverlight for Windows Phone。
我有一个ListBox listBoxOfItemsA,其ItemsSource属性绑定到ObservableCollection observableCollectionOfItemsA。 ListBox中的每个TypeA项都使用ListBox.ItemTemplate绘制,如XAML中所示。 注意Canvas元素。没有它,一切都很好。现在,我已将TypeA的每个实例与0个或更多TypeB实例相关联。 TypeB的每个实例都定义了一个HighlightColor。 我需要一些方法为ListBox中的每个TypeA项显示与之关联的所有TypeB项的HighlightColor。我想在每个ListBox项目中添加一个薄的Canvas元素,在0或更多区域中水平划分(0将只留下黑色背景),并在Canvas中绘制与TypeB的实例相关联的多个矩形ListBox项(以便所有这些矩形的总宽度不变)。
问题:我必须在“????”写一下位置,以便我可以将Canvas属性(在TypeA中)与ListBox.ItemTemplate中的Canvas元素绑定?
谢谢。
编辑20120406_0202 :每个TypeA实例可以同时映射到多个TypeB实例 。例如:每个TypeA是货币的移动(从一个账户到另一个账户,在某个特定日期,并且属于某个类别等),并且每个TypeB是每个TypeA可能满足或不满足的一组条件(例如,它的日期在某个范围内,其目的地帐户等于某一个,等等。对于每个TypeA,我想一目了然地展示它满足哪些条件。满意的每一套都会显示出额外的颜色。
public class TypeA
{
public int Id { get; set; }
public string Name { get; set; }
public Canvas CanvasForItemsB {...} // I would like something like this, here, and to bind it to the Canvas element in the XAML.
}
public class TypeB
{
public SolidColorBrush HighlightColor {...}
}
ObservableCollection<TypeA> observableCollectionOfItemsA;
listBoxOfItemsA.ItemsSource =observableCollectionOfItemsA;
<ListBox x:Name="listBoxOfItemsA">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Id, Mode=OneWay}" />
<TextBlock Text="{Binding Name, Mode=OneWay}" />
<Canvas ????="{Binding CanvasForItemsB, Mode=OneWay}" Width="480" Height="10" Background="Black" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
如果你试图突出显示列表框中的元素,只需在ItemTemplate中的StackPanel周围放置一个Border,然后在Border的background属性上设置一个绑定就可能更简单了。然后你不必担心在内存中存储一堆Canvas对象或者必须将它们注入ListBox。