WPF是什么决定了scrollviewer和stackpanel是否为子级提供无限大小而不是设置大小?

WPF是什么决定了scrollviewer和stackpanel是否为子级提供无限大小而不是设置大小?,wpf,xaml,stackpanel,sizing,Wpf,Xaml,Stackpanel,Sizing,在测量过程中,我仍然很困惑,因为这会导致stackpanel的子对象(信号图)被给定(292,无穷大)作为测量中的可用性: <Window x:Class="paneltesting.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfExp=

在测量过程中,我仍然很困惑,因为这会导致stackpanel的子对象(信号图)被给定(292,无穷大)作为测量中的可用性:

<Window x:Class="paneltesting.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wpfExp="clr-namespace:WpfExperimental"  
    Title="Window1" Height="300" Width="300">

    <StackPanel
    >
      <wpfExp:SignalGraph/>
  </StackPanel>
</Window>

当画布具有设定的大小时,子画布的可用大小将被赋予(无穷大,无穷大)。我假设这与窗口的交互有关,但我真的很困惑到底发生了什么

<Canvas Width="100" Height="100">
    <StackPanel SizeChanged="ScrollViewer_SizeChanged"
    >
      <wpfExp:SignalGraph/>
    </StackPanel>
</Canvas>

使用scrollviewer时也会发生同样的情况。我只是想了解scrollviewer是如何给孩子们提供尺寸的。我想知道更改controltemplate中的面板是否会导致scrollviewer将scrollviewer大小作为可用大小传递给其子级,而不是无限空间


我已经编写了一个解决方案,但我只是想了解这一点,这样我就可以确定没有更简单的方法来获得我想要的行为。

StackPanel
以其方向的无限大来测量其子对象,因此当方向垂直时,高度是无限的;另一个方向通常是给定它得到的约束

Canvas
始终以无限的宽度和高度测量其子对象


对于
ScrollViewer
,如果内容实现了IScrollInfo(即,它提供了滚动功能),并且它的
CanContentScroll
为真,则根据给定的约束来测量子项,如果显示滚动条,则可能减去滚动条所需的量。当然,它负责处理滚动。

StackPanel
在其方向上以无穷大测量其子对象,因此当方向垂直时,高度为无穷大;另一个方向通常是给定它得到的约束

Canvas
始终以无限的宽度和高度测量其子对象


对于
ScrollViewer
,如果内容实现了IScrollInfo(即,它提供了滚动功能),并且它的
CanContentScroll
为真,则根据给定的约束来测量子项,如果显示滚动条,则可能减去滚动条所需的量。当然,它负责处理滚动。

你的帖子让我大开眼界!谢谢:)你的帖子让我大开眼界!谢谢:)