0

我正在为 Windows Phone 使用 C# 和 Silverlight。

我有一个 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>
4

1 回答 1

0

如果您试图突出显示列表框中的元素,那么只需在 ItemTemplate 中的 StackPanel 周围放置一个边框,然后在边框的背景属性上设置一个绑定可能会更简单。这样您就不必担心在内存中存储一​​堆 Canvas 对象或将它们注入您的 ListBox。

于 2012-04-05T23:37:31.320 回答