2009-06-27 16 views

Antwort

388

einfach das Panel ändern verwendet, um die Elemente zu bewirten:

<ItemsControl ...> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

Sie nicht brauchen IsItemsHost = "True" hinzufügen zum StackPanel? –

+5

Ich glaube, das ist nur notwendig, wenn Sie das gesamte Steuerelement neu gestalten. Siehe http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemspanel.aspx –

+3

Antwort gilt auch für Silverlight – Scott

5

Die Top-Antwort ist gut, aber ich konnte es nicht mit Benutzersteuerelementen an der Arbeit. Wenn Sie UserControls benötigen, sollte dies helfen.

ItemsControl with Horizontal Usercontrols

Meine Version:

<Window.Resources> 
    <DataTemplate x:Key="ItemTemplate2"> 
     <StackPanel> 
      <uc:MyUserControl MinWidth="20" BorderBrush="Black" BorderThickness="0.1" /> 
     </StackPanel> 
    </DataTemplate> 

    <ItemsPanelTemplate x:Key="ItemsPanelTemplate1"> 
     <StackPanel Orientation="Horizontal" Margin="0,0,0,0"/> 
    </ItemsPanelTemplate> 
</Window.Resources> 

<StackPanel> 
    <ItemsControl x:Name="list_MyControls" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Top" 
        Margin="0,8,0,0" 
        ItemTemplate="{StaticResource ItemTemplate2}" 
        ItemsPanel="{StaticResource ItemsPanelTemplate1}" /> 
</StackPanel> 

, um Daten zu binden, müssen Sie eine ItemsSource zum ItemsControl im XAML oder Code hinter hinzuzufügen. Beachten Sie auch, dass uc: der xmlns:uc="NamespaceOfMyControl" am Anfang der Datei deklariert ist.

+0

Ich bin nicht gewohnt, WPF zu benutzen, also ist das, was ich sagen werde, sehr einfaches Zeug. Ich habe herausgefunden, dass in einem UserControl "UserControl.Resources" anstelle von "Window.Resources" verwendet werden sollte. Wie auch immer, danke für die tolle Antwort, löste mein Problem. –

20

Während die beworbene Antwort groß ist, ist hier eine Alternative, wenn Sie die Elemente strecken möchten.

<ItemsControl.ItemsPanel>        
    <ItemsPanelTemplate> 
     <UniformGrid Rows="1" /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 
+0

Wenn Sie UWP verwenden, benötigen Sie UWP-UniformGrid von hier: https://github.com/rickapps/UWP-UniformGrid-Control. Ich habe es einfach implementiert und dazu die Lösung von NielW. Wirklich einfach und löst das Problem. –

2

Dies ist ein Beispiel für das horizontale Scrollen in ItemsControl.

Zuerst die Viewmodel-Klasse des Hauptfensters, die verwendet wird, um die Liste der Elemente, die wir anzeigen möchten, zu ermitteln.

MainWindowViewModel.cs

using System.Collections.Generic; 

namespace ItemsControl 
{ 
    public class Item 
    { 
     public Item(string title) 
     { 
     Title = title; 
     } 

     public string Title { get; set; } 
    } 

    public class MainWindowViewModel 
    { 
     public MainWindowViewModel() 
     { 
     Titles = new List<Item>() 
     { 
      new Item("Slide 1"), 
      new Item("Slide 2"), 
      new Item("Slide 3"), 
      new Item("Slide 4"), 
      new Item("Slide 5"), 
      new Item("Slide 6"), 
      new Item("Slide 7"), 
      new Item("Slide 8"), 
     }; 
     } 

     public List<Item> Titles { get; set; } 
    } 
} 

Das Hauptfenster XAML für die Ansicht:

MainWindow.xaml

<Window x:Class="ItemsControl.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:ItemsControl"  
     mc:Ignorable="d" 
     Title="MainWindow" Height="400" Width="400"> 

    <Window.DataContext> 
     <local:MainWindowViewModel /> 
    </Window.DataContext> 

    <Grid Margin="5"> 
     <ScrollViewer 
      VerticalScrollBarVisibility="Disabled" 
      HorizontalScrollBarVisibility="Auto"> 

      <ItemsControl 
       x:Name="SearchResultList"     
       ItemsSource="{Binding Titles}"> 

       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <WrapPanel Orientation="Vertical"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 

       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Border 
          Margin="5" 
          BorderThickness="1" 
          BorderBrush="Aqua"> 

          <TextBlock 
           Text="{Binding Title}" 
           HorizontalAlignment="Center"        
           VerticalAlignment="Top" 
           FontSize="12" 
           TextWrapping="Wrap" 
           TextAlignment="Center" 
           FontWeight="DemiBold" 
           Width="150" 
           Height="150" /> 
         </Border> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 

      </ItemsControl> 
     </ScrollViewer> 

    </Grid> 
</Window> 

Je nachdem, wie hoch/breit Ihr Client-Bereich ist , dies führt zu dieser Art von Layout, Überlauf Elemente horizontal gescrollt:

enter image description here

Weitere Details finden Sie in diesem Blog-Link, darunter ein Beispiel dafür, wie Scrollen zu tun finden die vertikal:

http://www.technical-recipes.com/2017/how-to-orient-wrappanel-items-within-itemscontrol-lists-vertically-and-horizontally/

Verwandte Themen