WPF决定滚动查看器和堆栈面板是否为子级提供无限大小,而不是设置大小



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

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

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

我已经编写了一个解决方案,但我只想了解这一点,这样我就可以肯定,没有什么更简单的方法可以实现我想要的行为。

StackPanel在其方向的方向上测量其子级,因此当方向为垂直时为无限高度;另一个方向通常是给定的约束。

CCD_ 2总是以无限的宽度和高度来测量其子代。

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

相关内容

  • 没有找到相关文章

最新更新