Bạn có biết bất kỳ điều khiển nào được kế thừa từ ItemControl có hướng ngang của các mục không?
Bạn có biết bất kỳ điều khiển nào được kế thừa từ ItemControl có hướng ngang của các mục không?
Câu trả lời:
Chỉ cần thay đổi bảng điều khiển được sử dụng để lưu trữ các mục:
<ItemsControl ...>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Mặc dù câu trả lời được quảng cáo là tuyệt vời, đây là một lựa chọn thay thế nếu bạn muốn các mặt hàng được kéo dài.
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Câu trả lời hàng đầu là tốt, nhưng tôi không thể làm cho nó hoạt động với UserControls. Nếu bạn cần UserControls, điều này sẽ giúp.
Mục Kiểm soát với Usercontrols ngang
Phiên bản của tôi:
<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>
Liên kết với dữ liệu, bạn sẽ cần phải thêm một ItemsSource
đến ItemsControl
trong XAML hoặc đằng sau mã. Cũng lưu ý rằng đó uc:
sẽ là xmlns:uc="NamespaceOfMyControl"
khai báo ở đầu tệp.
Đây là một ví dụ về cách thực hiện cuộn ngang trong ItemControl.
Đầu tiên, lớp viewmodel cửa sổ chính được sử dụng để lấy / thiết lập danh sách các mục chúng tôi muốn hiển thị.
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; }
}
}
Cửa sổ chính xaml cho chế độ xem:
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>
Tùy thuộc vào mức độ cao / rộng của khu vực khách hàng của bạn, điều này sẽ dẫn đến kiểu bố trí này, các mục tràn được cuộn theo chiều ngang:
Thông tin chi tiết có thể được tìm thấy tại liên kết blog này, bao gồm một ví dụ về cách thực hiện cuộn theo chiều dọc: