2012-04-05 60 views
0

我使用Windows Phone的C#和Silverlight。如何将XAML中的Canvas元素绑定到代码后面的Canvas属性?

我有一个ListBox的listBoxOfItemsA其ItemsSource属性绑定到一个ObservableCollection observableCollectionOfItemsA。在ListBox中的每个TypeA项目都使用ListBox.ItemTemplate绘制,如XAML中所示。 注意Canvas元素。没有它,一切都很好。现在,我已将TypeA的每个实例与TypeB的0个或更多实例相关联。 TypeB的每个实例都定义了一个HighlightColor。 我需要某种方式来处理ListBox中的每个TypeA项目,以显示与其关联的所有TypeB项目的HighlightColor。我正在考虑为每个ListBox项目添加一个薄的Canvas元素,以便在0或更多区域中水平划分它(0将仅留下黑色背景),并且在该Canvas中绘制与TypeB的实例关联的许多矩形ListBox项目(以便所有这些矩形的总宽度不变)。

问题:我必须在“????”位置,以便我可以将Canvas属性(在TypeA中)与ListBox.ItemTemplate中的Canvas元素绑定?

谢谢。

编辑20120406_0202:每个类型A实例可以被映射到一个以上的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

如果你想突出你的列表框元素(一个或多个),它很可能是简单到只需将您的ItemTemplate周围的StackPanel一个边界,然后设置在边框的背景结合属性。那么你不必担心将一堆Canvas对象存储在内存中,或者不得不将它们注入到ListBox中。

+0

KodeKreachor,listBoxOfItemsA中的每个项目都可以映射为MORE THAN ONE颜色。 – Telaclavo 2012-04-05 23:40:13

+0

很酷,所以看起来你可以在列表项的视图模型上更改背景颜色属性的画笔颜色值,然后该视图将反映更新后的颜色。 – KodeKreachor 2012-04-05 23:46:12

+0

我的意思是同时有多种颜色。 – Telaclavo 2012-04-06 00:02:00

相关问题