2013-12-07 2 views
2

Я хочу иметь вертикальную полосу прокрутки на моей сетке, которая кажется достаточно простой, но по какой-то причине она просто не сработает. Когда я устанавливаю видимость VerticalScrollBarVisibility, он появляется, но ничего не делает. Когда он установлен на авто, он вообще не отображается.ScrollViewer не работает с сеткой в ​​wpf

Я прочитал совет на этом веб-сайте, но он, похоже, не работает для меня. Я знаю, что строки должны быть установлены на фиксированную высоту или *, и у меня есть комбинация обоих. Я также попытался установить максимальную высоту сетки и высоту полосы прокрутки, как было предложено, но ни один из них не работал.

Вот как я это настроило (сетка внутри вкладки):

</TabItem.Header> 
<ScrollViewer VerticalScrollBarVisibility="Auto"> 
<Grid Name="CSGrid"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="400"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="5"/> 
     <RowDefinition Height="1"/> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="20"/> 
     ... 

Я тогда большое количество строк, содержание которых я устанавливаю через C# код, если это делает разницу. Все высоты установлены на 20. После этого у меня также есть несколько прямоугольников и текстовых блоков в сетке, ничто из того, что я мог бы представить, было бы проблематичным - если бы они не изменили каким-то образом?

В коде добавить текст в строки следующим образом:

TextBlock hist1 = new TextBlock(); 
TextBlock hist2 = new TextBlock(); 
TextBlock hist3 = new TextBlock(); 
TextBlock hist4 = new TextBlock(); 
TextBlock hist5 = new TextBlock(); 

Строка [] allHist = File.ReadAllLines ("MedicalHistory.txt");

hist1.Text = allHist[0]; 
hist2.Text = allHist[1]; 
hist3.Text = allHist[2]; 
hist4.Text = allHist[3]; 
hist5.Text = allHist[4]; 

CSGrid.Children.Add(hist1); 
CSGrid.Children.Add(hist2); 
CSGrid.Children.Add(hist3); 
CSGrid.Children.Add(hist4); 
CSGrid.Children.Add(hist5); 

Grid.SetColumn(hist1, 0); 
Grid.SetColumn(hist2, 0); 
Grid.SetColumn(hist3, 0); 
Grid.SetColumn(hist4, 0); 
Grid.SetColumn(hist5, 0); 

Grid.SetRow(hist1, 5); 
Grid.SetRow(hist2, 6); 
Grid.SetRow(hist3, 7); 
Grid.SetRow(hist4, 8); 
Grid.SetRow(hist5, 9); 

Любая помощь будет принята с благодарностью

+0

Я не вижу содержание становится добавлен в ScrollViewer. Попробуйте что-то вроде и посмотрите, появляется ли оно или нет. – srsyogesh

+0

Мне сказали, что я обычно должен иметь большой размер внутри зрителя прокрутки, а затем установить желаемый размер для реального просмотра прокрутки –

+0

Это было плохо, я удалил этот второй пример. Спасибо за советы. Да, это то, что я читал. У меня есть много в полосе прокрутки, но когда я устанавливаю максимальную высоту сетки, она обрезается, но полоса прокрутки по-прежнему не отображается ... – user3077913

ответ

2

Вы должны установить RowDefinitionHeight свойство более TabControl высоты.

я закодированы это для вас и работает отлично:

<Window x:Class="TestApp13.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:src="clr-namespace:TestApp13" 
    Title ="Title" Height="600" Width="800"> 
<TabControl> 
    <TabItem Header="Tab 1"> 
     <ScrollViewer VerticalScrollBarVisibility="Auto"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="200"/> 
        <RowDefinition Height="200"/> 
        <RowDefinition Height="200"/> 
        <RowDefinition Height="200"/> 
        <RowDefinition Height="200"/> 
        <RowDefinition Height="2000"/> 
       </Grid.RowDefinitions> 
       <Button Width="100" Height="30" Grid.Row="0"/> 
       <Button Width="100" Height="30" Grid.Row="1"/> 
       <Button Width="100" Height="30" Grid.Row="2"/> 
       <Button Width="100" Height="30" Grid.Row="3"/> 
       <Button Width="100" Height="30" Grid.Row="4"/> 
       <Button Width="100" Height="30" Grid.Row="5"/> 
      </Grid> 
     </ScrollViewer> 
    </TabItem> 
</TabControl> 

+0

Спасибо, но этого я не могу понять. Даже когда я устанавливаю высоту всех строк, она все равно не работает. Я действительно смущен. Может ли это иметь какое-либо отношение к тому, как я добавляю детей в сетку? Я просто использую CSGrid.Children.Add(), и кажется, что он работает нормально – user3077913

+0

Можете ли вы опубликовать файл xaml и cs? Поэтому я могу решить ваш вопрос. –

+0

Большое спасибо, я отредактировал мое сообщение, надеюсь, что поможет – user3077913

3

Использование ScrollViewer.CanContentScroll = "True" в сетке:

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
<Grid Name="CSGrid" ScrollViewer.CanContentScroll="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="400"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="5"/> 
     <RowDefinition Height="1"/> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="20"/> 
     ... 
Смежные вопросы