¿Conoces algún control heredado de ItemsControl que tenga una orientación horizontal de los elementos?ItemsControl con orientación horizontal
Respuesta
basta con cambiar el panel utilizado para albergar los artículos:
<ItemsControl ...>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
La respuesta más común es buena, pero no pude conseguir que funcione con UserControls. Si necesita UserControls, esto debería ayudar.
ItemsControl with Horizontal Usercontrols
Mi versión:
<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>
para unirse a los datos, tendrá que añadir una ItemsSource
a la ItemsControl
en el XAML o código atrás. También tenga en cuenta que uc:
sería el xmlns:uc="NamespaceOfMyControl"
declarado en la parte superior del archivo.
No estoy acostumbrado a usar WPF, así que tal vez lo que diré es algo muy básico. Descubrí que dentro de UserControl debería usar "UserControl.Resources" en lugar de "Window.Resources". De todos modos, gracias por la excelente respuesta, resolvió mi problema. –
Si bien la respuesta promocionada es excelente, aquí hay una alternativa si desea que los artículos se extiendan.
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Si está utilizando UWP, necesitará UWP-UniformGrid desde aquí: https://github.com/rickapps/UWP-UniformGrid-Control. Acabo de implementarlo más la solución de NielW anterior. Realmente fácil y resuelve el problema. –
Este es un ejemplo de cómo hacer desplazamientos horizontales dentro de ItemsControl.
En primer lugar, la ventana principal viewmodel class solía obtener/establecer la lista de elementos que deseamos mostrar.
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; }
}
}
La ventana principal xaml para la vista:
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>
Dependiendo de qué tan alto/ancho de su área de cliente es , esto dará como resultado este tipo de diseño, elementos de desbordamiento desplazados horizontalmente:
Más detalles se pueden encontrar en este enlace del blog, incluyendo un ejemplo de cómo hacer el desplazamiento vertical:
- 1. Orientación horizontal para UITabBarController?
- 2. Android, solo orientación horizontal?
- 3. Detecta la orientación de Android: horizontal-izquierda v. Horizontal-derecha
- 4. Orientación horizontal en el control del repetidor
- 5. ¿Cómo puedo desactivar la orientación horizontal?
- 6. imprimiendo una imagen en orientación horizontal?
- 7. WPF a XPS en orientación horizontal
- 8. ItemsControl con encabezado estático
- 9. Hacer ItemsControl childs redimensionables con un divisor
- 10. Widget de Android diferente orientación vertical y horizontal
- 11. Diseño diferente para orientación horizontal y vertical android
- 12. La transición animada no funciona correctamente en orientación horizontal
- 13. Modal View Force del controlador Orientación horizontal en iOS 6
- 14. Barra de accionesSherlock: pestañas que no responden en orientación horizontal
- 15. ItemsControl Arrastrar y soltar
- 16. Desactivar orientación pero detectar orientación
- 17. WrapPanel no se ajusta cuando está en un StackPanel con orientación horizontal
- 18. WPF Orientación
- 19. ¿Orientación de imagen y validación con Paperclip?
- 20. WPF horizontal DataGrid
- 21. GridView con scroll horizontal
- 22. PrintDialog con páginas Horizontal y Vertical
- 23. Virtualización de ItemsControl?
- 24. ¿La orientación de todos los monitores de escritorio/portátiles es similar a la orientación horizontal en dispositivos como el iPad?
- 25. orientación Android - problemas con las intenciones (cámara)
- 26. Animate Inserciones a ItemsControl
- 27. ¿El ancho y la altura cambian con la orientación?
- 28. Cambie la orientación del papel para los diagramas R a horizontal
- 29. Android force Disposición Horizontal (horizontal)
- 30. Deshabilitar desplazamiento horizontal con JavaScript
¿No es necesario agregar IsItemsHost = "true" al StackPanel? –
Creo que eso solo es necesario si estás remodelando todo el control. Consulte http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemspanel.aspx –
La respuesta también se aplica a Silverlight – Scott