2013-07-11 13 views
5

Ich muss alle Dateien in einem bestimmten Pfad anzeigen. Ich habe ein Benutzersteuerelement erstellt, das Textblöcke für die Details der Datei enthält (Name, Größe, Erweiterung usw.). Dieses Steuerelement ist das Kind des einheitlichen Rasters.WPF Scroll ein Uniformgrid

Das Problem ist, wenn meine uniformgrid 5x5 ist, und ich habe über 25 Dateien, 26. Element wird nicht angezeigt.

Ich würde gerne wissen, gibt es eine Möglichkeit, den Inhalt des einheitlichen Gitters zu scrollen?

Ich weiß, ich kann eine Listbox und Bindung verwenden (ich lese immer noch darüber), aber ich muss die Steuerelemente programmgesteuert hinzufügen, weil das Steuerelement ein Ereignis hat, und ich abonniere es, wenn ein neues Instanz des Benutzersteuerelements wird erstellt und dann zum untergeordneten Array hinzugefügt.

ich this Post gesehen habe, und ich platziert bereits die uniforgrid in einem Itemscontrol, aber es hat nicht funktioniert, das ist mein XAML:

<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" > 
    <ItemsControl x:Name="gridArchivos"> 
     <ItemsControl.ItemsPanel > 
      <ItemsPanelTemplate > 
       <UniformGrid Columns="5" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl>      
</ScrollViewer> 

Nach Angaben der Post, nur cols oder Reihen müssen angegeben werden, niemals beide. Also, nur 5 Spalten. Ich möchte nicht horizontales Scrollen, nur vertikal.

Danke für Ihre Zeit.

Antwort

6

ich kopiert Ihre Xaml und es scheint, als mein Testcode Hier ist

erwartet zu funktionieren einhüllen es Sie Ihr Problem

XAML hilft Diagnose:

<Window x:Class="WpfApplication7.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" Name="UI"> 
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" > 
     <ItemsControl ItemsSource="{Binding Items, ElementName=UI}"> 
      <ItemsControl.ItemsPanel > 
       <ItemsPanelTemplate > 
        <UniformGrid Columns="5" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </ScrollViewer> 
</Window> 

Code:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     for (int i = 0; i < 1000; i++) 
     { 
      Items.Add("Stackoverflow"+i); 
     } 
    } 

    private ObservableCollection<string> items = new ObservableCollection<string>(); 
    public ObservableCollection<string> Items 
    { 
     get { return items; } 
     set { items = value; } 
    } 
} 

Ergebnis:

enter image description here

+0

Mit Ihrem Beispiel habe ich festgestellt, dass ich eine Menge Elemente hinzufügen muss, um das Raster so zu sehen, wie ich es möchte. Gibt es eine Möglichkeit, die Gegenstände wie eine 5x5-Matrix angeordnet zu halten? Mit 5 Elementen zeigt das Raster sie zentriert auf vertikal an, und ich würde sie an der Spitze mögen. Danke für Ihre Hilfe!! – BlackCath

+0

Nevermind, ich habe es gefunden, ich habe VerticalAlignment = "Top" zu den uniformgrid-Attributen hinzugefügt. Danke für Ihre Hilfe! – BlackCath