2012-06-21 24 views
7

Tôi đang sử dụng GridView để hiển thị các nhóm các bộ mặt hàng khác nhau trong một ứng dụng WinRT XAML. Mọi thứ đều hoạt động tốt, ngoại trừ việc ItemsPanelTemplate sử dụng một lưới bao gói để ngăn xếp các mục của tôi theo chiều dọc khi nó ra khỏi không gian.Cuộn dọc bên trong nhóm GridView của các mục trong WinRT XAML

Vì vậy, tôi cố gắng sử dụng StackPanel, như thế này:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical" Visibility="Visible" /> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

Các mục được xếp chồng lên nhau theo chiều dọc, và đó là tuyệt vời, nhưng vấn đề bây giờ là tôi không thể di chuyển họ, và họ không phù hợp trên màn hình. Vì vậy, tôi đã thử bật cuộn dọc:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical" Visibility="Visible" 
        ScrollViewer.VerticalScrollBarVisibility="Visible" 
        ScrollViewer.VerticalScrollMode="Enabled"/> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

Nhưng điều đó không hiệu quả. Bất kỳ đề xuất nào về cách thực hiện cuộn dọc bên trong nhóm GridView?

EDIT 1:

Tôi cũng đã cố gắng này:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <ScrollViewer VerticalScrollBarVisibility="Visible" 
         HorizontalScrollMode="Disabled" 
         ZoomMode="Disabled" 
         VerticalScrollMode="Enabled"> 
       <StackPanel Orientation="Vertical" Visibility="Visible" /> 
     </ScrollViewer> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

này phá vỡ debugger như ItemsPanelTemplate cần có một bảng điều khiển như một đứa trẻ.

Trả lời

8

OK, cuối cùng tôi giải quyết nó! Ai có thể quan tâm:

<GroupStyle.ContainerStyle> 
    <Style TargetType="GroupItem"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 
        <ContentPresenter Content="{TemplateBinding Content}" Grid.Row="0"/> 
        <ItemsControl x:Name="ItemsControl2" ItemsSource="{Binding GroupItems}" Grid.Row="1"> 
         <ItemsControl.Template> 
         <ControlTemplate> 
          <ScrollViewer x:Name="ScrollViewer" VerticalScrollBarVisibility="Hidden"             VerticalScrollMode="Enabled" HorizontalScrollBarVisibility="Disabled"             HorizontalScrollMode="Disabled"> 
          <ItemsPresenter /> 
          </ScrollViewer> 
         </ControlTemplate> 
         </ItemsControl.Template> 
        </ItemsControl> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
</GroupStyle.ContainerStyle> 

Điều quan trọng là bạn sử dụng lưới để đảm bảo rằng ScrollViewer cân chính xác.

+0

Làm thế nào để scrollviewer của bạn được mở rộng một cách chính xác! Tôi đặt một ListView với dòng chảy ngang bên trong một lưới điện. Toàn bộ ListView của tôi cuộn thay vì các cột riêng lẻ. – akshay2000

+0

Tốt, vâng. đây là những việc bạn phải làm. Về cơ bản dock scrollviewer của bạn trong một lưới điện để chiều cao của nó được thiết lập và bạn có thể di chuyển bên trong nó. –

+0

Cảnh báo XamlCompiler WMC1500: 'ContainerStyle' không còn được dùng nữa: ContainerStyle có thể bị thay đổi hoặc không có sẵn cho bản phát hành sau Windows 8.1 và không được hỗ trợ cho ItemsControl.GroupStyle. – Bos

0

Tôi sẽ đặt trực tiếp các phần tử của bạn vào trình xem cuộn. Như thế này:

<GroupStyle.Panel> 
<ItemsPanelTemplate> 
     <ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollMode="Disabled" ZoomMode="Disabled" VerticalScrollMode="Enabled"> 
      <StackPanel Orientation="Vertical" Visibility="Visible" /> 
     </ScrollViewer> 
</ItemsPanelTemplate> 

Tôi hy vọng điều này sẽ giúp, Lance

+2

Cảm ơn bạn đã trả lời. Tôi cũng đã thử điều này. Điều này phá vỡ trình gỡ lỗi, vì ItemsPanelTemplate cần một bảng điều khiển như một đứa trẻ. –

+0

Điều gì sẽ xảy ra nếu bạn đặt thêm lưới đệm hoặc ngăn xếp chồng lên nhau để giữ scrollviewer. Điều này sẽ đáp ứng các mẫu và vẫn trông giống với người dùng. ItemsPanelTemplate> Stackpanel> Scrollviewer> Stackpanel –

+0

@LanceMcCarthy Điều đó cũng không có tác dụng. Bạn vẫn sẽ nhận được ngắt trình gỡ lỗi. – akshay2000

2

Điều này thì sao?

Nó làm cho các yếu tố như thế này:
khoản 1 khoản 2
Khoản 3 Mục 4

<ListView Width="200"> 
    <ListBoxItem> 
     <TextBlock>Item 1</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 2</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 3</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 4</TextBlock> 
    </ListBoxItem> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapGrid Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 
0

Bạn cũng có thể muốn thiết lập các ZoomMode của ScrollViewer Disabled :)

Trân