Silverlight Listbox Details

Eine Listbox wird in WPF und Silverlight 2.0 per XAML Code deklariert. Um Daten darin darzustellen gibt es Grundsätzlich zwei Möglichkeiten per Datenbindung oder mit festen Einträgen. Ich will mich dieses mal mit statischen Einträgen befassen. Die platzierung der Box kann mit Canvas.Top Left ect erfolgen. Wenn man Expression Blend verwendet erzeugt dieses einen Rand ( Margin) um die Listbox im umgebenden Container zu platzieren.

<ListBox Margin="56,40,56,60"></ListBox>

Man kann dann einzelne ListboxItem’s per Context Menü hinzufügen. Die Einträge kann man direkt in der Listbox bearbeiten (hier Vornamen)

image

Der Erzeugte XAML Code sieht so aus.

<ListBox Margin="56,40,56,60">
    <ListBoxItem Content="Hannes"/>
    <ListBoxItem Content="Andreas"/>
    <ListBoxItem Content="ListBoxItem"/></ListBox>
Natürlich kann man dann über die Attribute jedes ListboxItem Elementes die Darstellung ändern und z.B. mit Background="LightGreen"

Wer es visuell liebt kann auch über Propertys – Common Properys- Items- Item Collection folgenden Dialog dazu verwenden

image

Fast noch interessanter ist aber, das man in ein Listboxitem (fast) beliebige andere Controls platzieren kann. Nur eines muss man beachten. Es gibt nur ein mögliches Kind Element. Deshalb gruppiere ich im folgenden Beispiel eine Checkbox und einen Texblock in einem Stackpanel dessen Orientation auf Horizontal gesetzt ist. Man kann das recht schön mit Expression Blend tun. Immer das Element das im Dialog “Objects und Timeline” (hier links) gelb umrandet ist wird mit dem neu reingezogenen Steuerelement gefüllt.

image

Der XAML Code sieht dann so aus.

<ListBoxItem Height="20" >
        <StackPanel Height="16" Width="285" Orientation="Horizontal">
            <CheckBox Height="12.621" Width="32" Content="CheckBox" RenderTransformOrigin="0.5,0.5">
            </CheckBox>
            <TextBlock Height="16" Width="64" Text="Bernhard" TextWrapping="Wrap"/>
        </StackPanel>
</ListBoxItem>

Jedes XAML Element lässt sich per x:Name Attribut mit einem Namen versehen. Über diesen Namen kann man dann im Code das Objekt auch ansprechen.

If Box3.IsChecked Then
            'tu was nettes
End If

Kommentar schreiben