正在对ScrollViewer的SizeChanged事件执行UpdateLayout



更新我有一个迟钝的要求,我正在努力满足现有元素的工作,我真的可以用另一双眼睛了。

为了更快地解释,一些伪;

<Grid>
  <Grid.RowDefinitions>
     <RowDefinition Height="Auto"/>
     <RowDefinition Height="Auto"/>
     <RowDefinition Height="*"/>
     <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Grid/>
   <Grid Grid.Row="1"/>
   <Grid Grid.Row="2"/>
   <Grid Grid.Row="3" Visibility="Collapsed">
      <Grid.RowDefinitions>
         <RowDefinition Height="20"/>
         <RowDefinition Height="*"/>
      </Grid.RowDefinitions>
        <ScrollViewer Grid.Row="1">
          <ItemsControl/>
        </ScrollViewer/>
    </Grid>
</Grid>

因此,我们这里有一个父Grid和一个子Grid,其可见性被切换。当前父行已设置"自动高度",因此当子行消失时,该行将折叠。

最初,在子级上只设置了一个MaxHeight,当ScrollViewer滚动条可见时,它调用得很好。除了我需要放弃MaxHeight,让它占用所有可用/需要的空间,同时在大小更改时调用ScrollViewer上的滚动条。我还应该提到,如果可以的话,我正在努力在XAML中完成这一切,而不需要任何代码。

我尝试将EventTrigger装配到SizeChanged,还尝试了Loaded并让它执行CallMethodAction以执行UpdateLayout,希望它能重新绘制/测量ScrollViewer以在需要时调用滚动条。然而没有快乐。。。

类似的东西附在ScrollViewer上;

<i:Interaction.Triggers>
   <i:EventTrigger EventName="Loaded">
       <ei:CallMethodAction MethodName="UpdateLayout"/>
   </i:EventTrigger>
</i:Interaction.Triggers>

我希望一个睡眠时间比我多的人能对我的愚蠢或我忘记了什么有所了解?似乎这样的东西应该起作用。

我所需要做的就是仍然尊重Visibility的更改并允许父行折叠,但仍然在滚动条可见且需要时调用滚动条。有什么窍门吗?

PS-我也在尝试InvalidateArrange&InvalidateMeasure如果运气不好,我在这种情况下是否使用了错误的CallMethodAction?

在外部网格中的第二个RowDefinition上设置VerticalAlignment="Top"而不设置Height(或Height="*")应该有效:

<Grid VerticalAlignment="Top">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="1" Visibility="Collapsed">
        <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <ScrollViewer Grid.Row="1">
            <ItemsControl/>
        </ScrollViewer>
    </Grid>
</Grid>

最新更新