ScrollViewer无法在wpf中使用网格

时间:2013-12-07 17:11:41

标签: c# wpf

我希望在我的网格上有一个垂直滚动条,这看起来很简单,但由于某种原因它不会起作用。当我将VerticalScrollBarVisibility设置为visible时,它会显示但不执行任何操作。当它设置为自动时,它根本不显示。

我已阅读本网站的建议,但似乎对我不起作用。我知道行应该设置为固定高度或*并且我有两者的组合。我也尝试设置网格的最大高度和滚动条的高度,如同建议的那样,但这两者都没有。

这就是我设置它的方式(网格在标签内):

</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();

string [] 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);

非常感谢任何帮助

3 个答案:

答案 0 :(得分:4)

使用ScrollViewer.CanContentScroll =&#34; True&#34;在您的网格中:

<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"/>
        ...

答案 1 :(得分:2)

您应该将RowDefinition Height属性设置为超过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>

答案 2 :(得分:0)

<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 Hight="500">
            <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>