在WPF中滚动条有问题

时间:2015-05-07 18:42:16

标签: wpf xaml

所以我试图让我的滚动条到A只显示需要,B只出现在我的描述文字

现在滚动视图从窗口顶部到底部

<Window x:Class="WpfApplication3.DataWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DataWindow" Height="300" Width="300">
<Grid>
    <Label x:Name="lblTitle" Content="Label" HorizontalAlignment="Left" Margin="96,25,0,0" VerticalAlignment="Top" Width="186"/>
    <Label x:Name="lblPublishDate" Content="Label" HorizontalAlignment="Left" Margin="96,53,0,0" VerticalAlignment="Top" Width="186"/>
    <Image x:Name="imgPic" HorizontalAlignment="Left" Height="81" Margin="10,10,0,0" VerticalAlignment="Top" Width="81"/>
    <ScrollViewer>
        <TextBlock x:Name="tbDesc" HorizontalAlignment="Left" Margin="10,96,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="167" Width="272" Text="TextBlock" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" />
    </ScrollViewer>

</Grid>

2 个答案:

答案 0 :(得分:1)

网格试图让它的孩子占用所有可用空间。

您的ScrollViewer是其中一个子项,因此默认情况下它将填充所有可用空间。

有很多方法可以解决这个问题。

  • 您可以使用不同的面板类型,不会尝试拉伸它的孩子来填充所有可用空间。根据您在利润率过高时所做的事情,Canvas可能是合适的。

    我建议您阅读本文,以便快速了解WPF的可用布局面板:WPF Layouts - A Visual Quick Start

  • 另一种方法是给你的网格一些行定义,并指定包含ScrollViewer的行应该是固定大小,或者应该调整大小以使其适合子对象想要的任何大小(高度=&# 34;自动&#34)

  • 或者您可以将ScrollViewer设置为固定高度,并设置它的VerticalAlignment属性,使其停靠在网格的顶部或底部。

就个人而言,我会推荐第一个选项 - 检查WPF的布局系统,并为您的布局确定更适合的面板类型。如果最合适的面板类型一个网格,那么我强烈建议使用RowDefinitions和ColumnDefinitions为Grid提供一些结构,而不是尝试使用过大的边距来定位控件。

答案 1 :(得分:0)

你非常接近,问题似乎是布局问题。由于控件在网格中排列而没有行和列定义,因此当文本块遵循其固定大小和边距时,scrollviewer会尝试调整大小到网格的完整大小。尝试以下起点,看看是否有帮助:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="150"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
        <Label x:Name="lblTitle" Content="Label" HorizontalAlignment="Left" Width="186"/>
        <Label x:Name="lblPublishDate" Content="Label" HorizontalAlignment="Left" Width="186"/>
        <Image x:Name="imgPic" HorizontalAlignment="Left" Height="81" Width="81"/>
    </StackPanel>
    <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
        <TextBlock x:Name="tbDesc" HorizontalAlignment="Left" TextWrapping="Wrap"  Text="TextBlock"/>
    </ScrollViewer>
</Grid>