2014-11-04 15 views
20

W .NET 3.5 Mam siatkę w oknie. Zapełniam tę tabelę przyciskami. Kiedy przyciski wypełnią siatkę i znikną z widoku, Grid nie wyświetla paska przewijania. Ustawiłem pionowy zwój siatki, aby był widoczny, ale nadal nie jest wyświetlany.Siatka WPF nie wyświetlająca pasków przewijania

<Window x:Name="Window" x:Class="MergeToCheck.CheckList" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Loaded="Window_Loaded" ScrollViewer.VerticalScrollBarVisibility="Disabled" 
       ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True" WindowStyle="None" 
     Height="671" Width="846.299" BorderThickness="5"> 

    <Grid> 
     <Grid x:Name="MyGrid" HorizontalAlignment="Left" Height="535" VerticalAlignment="Top" Width="736" Margin="10,63,0,0" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible"> 
      <Grid.Resources> 
       <Style TargetType="{x:Type Panel}"> 
        <Setter Property="Margin" Value="0,0,0,6" /> 
       </Style> 
      </Grid.Resources> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 
     </Grid>   
    </Grid> 
</Window> 

Kod który dodaje przyciski:

 CheckList CheckListCtrl = new CheckList(); 

     System.Windows.Controls.Button btn; 
     int row = 0; 
     int col = 0; 

     CheckListCtrl.MyGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(100) }); 

     foreach(var c in list) 
     { 
      btn = new System.Windows.Controls.Button(); 
      btn.FontSize = 15; 
      btn.FontWeight = FontWeights.UltraBold; 
      btn.Content = c.Name; 
      btn.Style = System.Windows.Application.Current.FindResource(System.Windows.Controls.ToolBar.ButtonStyleKey) as Style; 
      btn.BorderBrush = new SolidColorBrush(Colors.Black); 
      btn.BorderThickness = new Thickness(2); 
      btn.MinWidth = 145; 
      btn.MaxWidth = 145; 
      btn.MinHeight = 95; 
      btn.MaxHeight = 95; 

      btn.SetValue(Grid.RowProperty, row); 
      btn.SetValue(Grid.ColumnProperty, col); 

      CheckListCtrl.MyGrid.Children.Add(btn); 

      if ((col + 1) % CheckListCtrl.MyGrid.ColumnDefinitions.Count == 0) 
      {      
       col = 0; 
       row++; 
       CheckListCtrl.MyGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(100) }); 
      } 
      else 
       col++; 
     } 
+0

Jeśli twoja siatka ma wystarczająco dużo miejsca, aby pokazać wszystkie przedmioty, paski przewijania nie pojawią się. Paski przewijania pojawiają się tylko wtedy, gdy jest więcej elementów niż spacja. Czy na pewno jest więcej przedmiotów niż miejsce w twojej siatce? – Sonhja

+0

Tak na 100% pewności, że zabrakło miejsca, ale jeśli ustawię ScrollViewer.HorizontalScrollBarVisibility = "Visible", powinien on wyświetlać paski przewijania, niezależnie od tego, czy ma wystarczająco dużo miejsca. – CathalMF

+2

Siatka nie zawiera żadnych pasków przewijania. Jeśli chcesz się przewijać, potrzebujesz 'ScrollViewer' jak' ... ' – dkozl

Odpowiedz

49

Grid nie obsługuje przewijanie funkcjonalność. Jeśli chcesz przewinąć coś, czego potrzebujesz ScrollViewer control

<ScrollViewer HorizontalScrollBarVisibility="Visible"> 
    <Grid x:Name="MyGrid" HorizontalAlignment="Left" Height="535" VerticalAlignment="Top" Width="736" Margin="10,63,0,0"> 
     <Grid.Resources> 
     <Style TargetType="{x:Type Panel}"> 
      <Setter Property="Margin" Value="0,0,0,6" /> 
     </Style> 
     </Grid.Resources> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
    </Grid>   
</ScrollViewer> 
+0

Świetnie. To działa. – Zeeshan

Powiązane problemy