0

在Measure期间,我仍然很困惑,因为这导致stackpanel的孩子(信号图)被赋予(292,Infinity)作为Measure中的availableSize:

<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 如何为其子级提供大小。我想知道是否更改其 controltemplate 中的面板可能会导致滚动查看器仅将滚动查看器大小作为 availableSize 传递给其子级而不是无限空间。

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

4

1 回答 1

4

StackPanel在其Orientation方向上以无穷大测量其子级,因此当 Orientation 为 Vertical 时,其高度为无穷大;另一个方向通常给出它得到的约束。

Canvas总是用无限的宽度和高度测量它的孩子。

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

于 2013-07-18T00:34:57.500 回答