2014-11-04 23 views
20

In .NET 3.5 Ho una griglia in una finestra. Sto popolando questa griglia con pulsanti. Quando i pulsanti riempiono la griglia e spariscono, la griglia non mostra la barra di scorrimento. Ho impostato lo scorrimento verticale delle Griglie per essere visibile ma non viene ancora visualizzato.WPF Grid non mostra barre di scorrimento

<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> 

Il codice che aggiunge i pulsanti:

 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

Se la griglia ha spazio sufficiente per mostrare tutti gli elementi, non appariranno le barre di scorrimento. Le barre di scorrimento vengono visualizzate solo se vi sono più elementi dello spazio. Sei sicuro che ci siano più oggetti che spazio nella tua griglia? – Sonhja

+0

Sì al 100% certo che abbia esaurito lo spazio, ma se imposto ScrollViewer.HorizontalScrollBarVisibility = "Visibile" dovrebbe mostrare le barre di scorrimento sempre indipendentemente dal fatto che abbia o meno spazio sufficiente. – CathalMF

+2

La griglia non include le barre di scorrimento di alcun tipo. Se si desidera scorrere è necessario 'ScrollViewer' come' ... ' – dkozl

risposta

49

Grid non supporta lo scorrimento funzionalità. Se si desidera scorrere qualcosa che è necessario ScrollViewer controllo

<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

Grande. Funziona. – Zeeshan