2014-11-04 3 views
20

В .NET 3.5 У меня есть сетка в окне. Я заполняю эту сетку кнопками. Когда кнопки заполняют сетку и исчезают из вида, сетка не показывает полосу прокрутки. Я установил вертикальную прокрутку сетки, чтобы ее можно было увидеть, но она пока не отображается.WPF Grid не показывает полосы прокрутки

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

Код, который добавляет кнопки:

 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

Если сетка имеет достаточно места, чтобы показать все элементы, полосы прокрутки не будут отображаться. Полосы прокрутки отображаются только в том случае, если есть больше предметов, чем места. Вы уверены, что в вашей сетке есть больше предметов, чем места? – Sonhja

+0

Да им 100% уверен, что у него закончилось свободное место, но если я установил ScrollViewer.HorizontalScrollBarVisibility = "Visible", он должен показывать полосы прокрутки всегда независимо от того, имеет ли он достаточно места или нет. – CathalMF

+2

Сетка не включает в себя полосы прокрутки любого типа. Если вы хотите прокрутить, вам нужно 'ScrollViewer', как' ... ' – dkozl

ответ

49

Grid не поддерживает функциональные возможности прокрутки. Если вы хотите, чтобы прокручивать то, что вам нужно ScrollViewer контроль

<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

Отлично. Оно работает. – Zeeshan

Смежные вопросы