Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中的滚动条有问题_Wpf_Xaml - Fatal编程技术网

WPF中的滚动条有问题

WPF中的滚动条有问题,wpf,xaml,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

所以我试着让我的滚动条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>


你很接近,问题似乎是布局问题。由于控件在网格中排列,没有行和列定义,因此scrollviewer试图将其大小调整为网格的完整大小,而textblock保持其固定大小和边距。尝试以下起点,看看是否有帮助:

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

网格试图让其子节点占用所有可用空间

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

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

  • 您可以使用不同的面板类型,即不尝试拉伸子面板以填充所有可用空间的面板类型。根据您使用过大的边距所做的工作,一个
    画布
    可能是合适的

    为了快速了解WPF可用的布局面板,我建议阅读以下内容:

  • 另一种方法是为网格提供一些行定义,并指定包含ScrollViewer的行的大小应为固定大小,或者应调整大小使其适合子对象所需的任何大小(Height=“Auto”)

  • 或者您可以给ScrollViewer一个固定的高度,并将其设置为
    垂直对齐
    属性,使其固定到网格的顶部或底部


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

在对您的答案稍加修改和格式化后,我得到了我想要的答案。谢谢^_^