2015-10-12 26 views
7

Merhaba Windows 10'da UWP öğreniyorum, bir ızgarada ilerlemem gerekiyor.Scrollviewer bir ızgara üzerinde çalışmıyor

<Grid> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <!-- Header --> 
     <Rectangle Grid.Row="0" Grid.ColumnSpan="3"/> 
     <TextBlock Grid.Column="1" Name="CurrentDateText" /> 


      <Button Name="NextButton" Grid.Column="2" Content="&gt;" 
        HorizontalAlignment="Right" Margin="20" 
        Click="NextButton_Click_1"/> 

          <ScrollViewer x:Name="Scroll" VerticalAlignment="Top" Grid.Row="1" VerticalScrollBarVisibility="Hidden"> 
       <Grid Grid.ColumnSpan="3" Name="Grid2"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="auto"/> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
       </Grid> 
      </ScrollViewer> 

     </Grid> 

ilk parçası: kodun ikinci parça olarak

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <CommandBar VerticalAlignment="Top" Grid.Row="0"> 
      <CommandBar.Content> 
       <TextBlock Name="CurrentDateText" Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Bottom" FontSize="22" FontStretch="ExtraExpanded"/> 
      </CommandBar.Content> 
      <CommandBar.PrimaryCommands> 
       <AppBarButton Name="button1" Icon="Forward" Label="button" Click="NextButton_Click_1"/> 
      </CommandBar.PrimaryCommands> 
     </CommandBar> 

      <Grid Grid.Row="1" Grid.ColumnSpan="3" Name="Grid1"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="60"/> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
     </Grid> 

       <ScrollViewer x:Name="Scroll" Grid.Row="2" VerticalAlignment="Top" VerticalScrollBarVisibility="Auto" VerticalScrollMode="Enabled"> 
      <Grid Grid.ColumnSpan="3" Name="Grid2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="60"/> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
     </Grid> 
     </ScrollViewer> 
    </Grid> 

: Onlar iki parça kod sahip çok benzer, benim niyet, Izgara2 içinde ilerlemek için ilk kod parçasıdır Kod çalışmıyor, ikinci çalışır. Neyin yanlış olduğunu anlayamıyorum, neden ilkinde işe yaramadığını anlamıyorum. Teşekkür ederiz

cevap

19

Bu yeni başlayanlar için yaygın bir hatadır ve bu konuda kötü hissetmemelisiniz. Kaydırmalı görüntüleyici hakkında hatırlanması gereken şey, bir yükseklik ve genişliğe sahip olması ZORUNLUDUR. Bazen yüksekliği ve genişliği ayarlarsınız. Bazen, yüksekliğin ve genişliğin kabın büyüklüğüne göre ayarlanmasını sağlarsınız. Sağ? Şuna

Görünüş: Sanki orada hiç gibi bu örnekte

<ScrollViewer> 
    <Grid Height="1000" /> 
</ScrollViewer> 

, kaydırma görüntüleyici hareket edecekti. Niye ya? Çünkü yüksekliği ve genişliği yoktur. Bu durumda içeriğiyle aynı boyutta olur. Gördüğünüz şey bu. Şuna

Görünüş:

<ScrollViewer Height="100"> 
    <Grid Height="1000" /> 
</ScrollViewer> 

Bu sadece iyi dikey kaydırma olur ama yatay kaydırma asla. Nedenini görebiliyor musun? Çünkü genişlik yok. Bazen bu mükemmel bir senaryo. Ama bir geliştiricinin korunmasını yakalayabilen başka bir şey. Şuna

Görünüş:

<StackPanel> 
    <ScrollViewer> 
     <Grid Height="1000" /> 
    </ScrollViewer> 
<StackPanel> 

Bu geliştiriciler bir sürü yakalar başka senaryodur. Niye ya? Bir yığın panelin yüksekliği sonsuz olduğundan. Boy ve genişlik temelde kap tarafından devralındığı için, kaydırma izleyicisinin hiçbir zaman, sonsuz boyutta büyümeye izin verdiği için kaydırma yapmak için bir nedeni yoktur. Şuna

Görünüş:

<Grid> 
    <ScrollViewer> 
     <Grid Height="1000" /> 
    </ScrollViewer> 
<Grid> 

mükemmeldir. Kaydırma görüntüleyici, istediğiniz gibi kaydırır, çünkü kaydırma görüntüleyicinin yüksekliği ve genişliği, kabinin yüksekliği ve ızgara genişliği ile miras alınır. Ve bir ızgara kendini pencerenin boyutuna göre kısıtladığı için, büyük bir formdasınız.

Şebeke davranışını, elbette bir yığın paneline koyarak bozabilirsiniz! Ne yaptığını ve neden yaptığını bilmiyorsan bunu yapma. XAML'de yeniyseniz Microsoft Virtual Academy'de this free course'un keyfini çıkarabilirsiniz.

Umarım bu yardımcı olur.

Şansın en iyisi!

+2

Bu beklenen bir davranış gibi görünmüyor. – Sergei

+0

TLDR: MSFT, sezgisel bir kontrol yapmaktan hoşlanmaz. –

+1

Sadece çok basit bir cevap, bir kararın karmaşıklığını yansıtabilir. –