0

Windows Phone には C# と Silverlight を使用しています。

ItemsSource プロパティが ObservableCollection observableCollectionOfItemsA にバインドされている ListBox listBoxOfItemsA があります。XAML に示すように、ListBox 内の各 TypeA 項目は、ListBox.ItemTemplate を使用して描画されます。Canvas 要素に注目してください。それがなければ、すべてがうまくいきました。ここで、TypeA の各インスタンスを TypeB の 0 個以上のインスタンスに関連付けました。TypeB の各インスタンスは、HighlightColor を定義します。ListBox の各 TypeA アイテムに、それに関連付けられているすべての TypeB アイテムの HighlightColor を表示する方法が必要です。各 ListBox 項目に薄い Canvas 要素を追加し、水平方向に 0 個以上の領域に分割し (0 は黒の背景のままになります)、TypeB のインスタンスが関連付けられているのと同じ数の長方形をその Canvas にペイントすることを考えていました。 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 の周りに Border を配置し、Border の background プロパティにバインドを設定する方がおそらく簡単です。そうすれば、一連の Canvas オブジェクトをメモリに保存したり、それらを ListBox に挿入したりする必要がなくなります。

于 2012-04-05T23:37:31.320 に答える