2016-10-21 3 views
0

Ich bin neu zu Blend und WPF und ich möchte ein Steuerelement, das ListBox-Eigenschaften, aber mit meinen eigenen benutzerdefinierten Elementen hat. Grundsätzlich möchte ich, dass jedes Element ein abgerundetes Rechteck mit einem Label ist. Der erste Weg, den ich dachte, war mit einem UserControl und StackPanel, obwohl ich nicht daran denken konnte, dem Programm mitzuteilen, welches Objekt (e) den Fokus hat. Aus diesem Grund dachte ich, dass ich eine ListBox verwenden und damit ein benutzerdefiniertes ListBoxItem erstellen könnte, aber offensichtlich konnte nur das Rechteck in das Steuerelement konvertiert werden, wodurch die Beschriftung verloren ging. Alle Zeiger wären eine große Hilfe.So erstellen Sie eine benutzerdefinierte Liste in Blend

Antwort

0

Sie können eine ListBox verwenden und sind nicht nur auf das Rechteck und nicht auf die Beschriftung beschränkt.

Verwenden Sie eine Standard-ListBox, und machen Sie ListBox.ItemTemplate so komplex, wie Sie möchten. Wenn Sie eine Reihe von Steuerelementen übereinander legen müssen, können Sie mit einem Canvas- oder Rastersteuerelement beginnen und von dort aus fortfahren.

Alternativ können Sie die Elementvorlage auch mit einem einzelnen Label-Steuerelement versehen (wenn sich das Element logisch wie ein Label verhält) und eine ControlTemplate verwenden, um den für diese Labels gerenderten visuellen Baum vollständig wiederherzustellen.

Referenzen:

  1. ItemTemplate

  2. ControlTemplate

Hier ist ein kurzes Beispiel.

XAML:

<Grid> 
    <ListView ItemsSource="{Binding Path=Labels}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Rectangle Fill="CadetBlue" RadiusX="10" RadiusY="10" SnapsToDevicePixels="True"> 
        </Rectangle> 
        <Label Content="{Binding}" Padding="10"/> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

Der "Ansichtsmodell":

public IEnumerable<string> Labels 
    { 
     get { return new string[] { "Foo", "Bar", "Baz" }; } 
    } 

Und das Ergebnis:

Output

Verwandte Themen