2017-11-13 4 views
0

Ich habe ein Problem festgestellt - ich habe ein Projekt erstellt, wo ich meinen Code an Xaml binden, indem Sie eine Bindung an die Listbox verwenden. Es hat jedoch einige Probleme in meinem zukünftigen Code verursacht - ich möchte meinem Formular eine Schaltfläche hinzufügen, aber ich finde einige Fehler.Hinzufügen von Schaltfläche außerhalb der verknüpften Listbox in XAML

'Die Artikelsammlung muss leer sein, bevor ItemsSource verwendet wird.'

Dieser Fehler tritt auf, wenn ich versuche, etwas außerhalb meiner bindefähigen Listbox zu binden.

Die Eigenschaft "VisualTree" kann nur einmal gesetzt werden.

Dieser Fehler tritt auf, wenn ich versuche, eine Schaltfläche unterhalb der Listbox hinzuzufügen.

Kann mir jemand sagen, wie ich das beheben kann?

Mein Code:

<ListBox x:Name="ItemsControl1"> 
    <ListBox.ItemsPanel> 

     <ItemsPanelTemplate> 

      <UniformGrid Columns="5"> 
      </UniformGrid> 

     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="Black" BorderThickness="2" Width="Auto" Height="Auto"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Number}"/> 
        <Image Source="{Binding Source}" Margin="0,0,5,0"/> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Das gewünschte Ergebnis wäre eine Schaltfläche unter dem Listenfeld sein.

+0

„in der Listbox, nur Darunter "klingt widersprüchlich. Setzen Sie den Button * neben * die ListBox in ein gemeinsames Panel, z. ein StackPanel oder Grid. – Clemens

+0

Ich habe eine vage allgemeine Idee, was Sie versuchen, aber bitte klären Sie, wo genau Sie die Schaltfläche angezeigt werden soll und warum es nicht außerhalb der Listbox statt. – grek40

+0

@Clemens haha, danke, ich habe den Fehler behoben. "Setzen Sie den Button neben der ListBox in ein gemeinsames Panel, beispielsweise ein StackPanel oder Grid." Dies ist, wenn ich die "Items-Sammlung muss leer sein, bevor Sie ItemsSource verwenden." Fehler – Noctii

Antwort

0

Sie sollten Ihre Schaltfläche unterListBox Deklaration hinzufügen. Ausnahmen, mit denen Sie konfrontiert sind, werden ausgelöst, da der visuelle Baum über die Bindung aufgefüllt wird und Sie ihn nicht mehr manuell ändern können. Sie müssen innerhalb von einigen Layout Container all dieses Zeug setzen (Grid, StackPanel, etc.), da Sie nicht Window einstellen 's/UserControl' s Content Eigenschaft zweimal:

<StackPanel> 
    <ListBox x:Name="ItemsControl1"> 
     <ListBox.ItemsPanel> 

      <ItemsPanelTemplate> 

       <UniformGrid Columns="5"> 
       </UniformGrid> 

      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Black" BorderThickness="2" Width="Auto" Height="Auto"> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Number}"/> 
         <Image Source="{Binding Source}" Margin="0,0,5,0"/> 
        </StackPanel> 
       </Border> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <Button/> 
</StackPanel> 
+0

Die Eigenschaft 'Inhalt' ist mehr als einmal festgelegt. Dies ist der Fehler, den ich erhalte, wenn ich meine Schaltfläche unter der Listbox deklariere. – Noctii

+0

Platzieren Sie ein Listenfeld mit einem Knopf in einem Container (z. B. 'StackPanel',' Grid') – Shcherban

+0

Vielen Dank! Ich habe ein Gitter um meine Listbox hinzugefügt und dann unter der Liste im Stackpanel eingefügt. – Noctii

Verwandte Themen