2009-08-18 34 views
47

Tôi đang cố gắng viết một ứng dụng WPF để hiển thị hình ảnh từ một vùng chọn. Tôi muốn hiển thị tất cả hình ảnh có sẵn trong một biểu ngữ dọc theo phía trên cùng của cửa sổ và hiển thị hình ảnh được chọn chính trong cửa sổ chính để xử lý thêm.Hộp danh sách WPF đặt các mục của nó theo chiều ngang

Nếu tôi muốn danh sách trên Bên trái của cửa sổ, hiển thị hình ảnh theo chiều dọc, tôi có thể làm điều này khá thanh lịch bằng cách sử dụng dữ liệu.

<ListBox 
     Name="m_listBox" 
     IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding}"    
     > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding}" Width="60" Stretch="Uniform" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Có cách nào đơn giản để tôi có thể tạo chiều ngang thay vì theo chiều dọc không? Các yêu cầu chính của một giải pháp là:

  • Các mục được dân cư sử dụng databinding
  • Các mục đã chọn sẽ được thay đổi đơn giản bởi người sử dụng nhấn vào nó.
+0

Tại sao không listview? – adatapost

Trả lời

101

WrapPanel

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBoxItem>listbox item 1</ListBoxItem> 
    <ListBoxItem>listbox item 2</ListBoxItem> 
    <ListBoxItem>listbox item 3</ListBoxItem> 
    <ListBoxItem>listbox item 4</ListBoxItem> 
    <ListBoxItem>listbox item 5</ListBoxItem> 
</ListBox> 

WPF Tutorial

+37

Hoặc StackPanel với định hướng = "ngang" – Nir

+2

StackPanel sẽ là giải pháp tốt hơn ở đây như Nir nói. –

+1

Cảm ơn! Có, stackPanel với hướng ngang là lựa chọn tốt hơn. – adatapost

10

Giá trị mặc định ItemsPanel cho ListBox điều khiển là một VirtualizingStackPanel, vì vậy nếu bạn muốn, kinh nghiệm mặc định bình thường đối với sự kiểm soát nhưng chỉ có nó đặt ra theo chiều ngang, bạn nên xác định điều này (và thay đổi hướng).

Ví dụ:

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
Các vấn đề liên quan