在我的应用程序中,我有一个带有此代码段的视图:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto"/>
<RowDefinition Name="DownloadsExpanderRow">
<RowDefinition.Style>
<Style TargetType="RowDefinition">
<Setter Property="Height" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=DownloadExpander, Path=IsExpanded}" Value="False">
<Setter Property="Height" Value="Auto"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RowDefinition.Style>
</RowDefinition>
</Grid.RowDefinitions>
<Border/>
<GridSplitter Grid.Row="1"/>
<Expander Grid.Row="2" Name="DownloadExpander"/>
</Grid>
所有这一切的目的是有一个主要区域(网格行#0),其大小可以填充未被其他行占用的网格中的所有空间,以及底部的扩展器,当展开时可以调整为大小更高或更短。
我发现,当GridSplitter已经被用于调整Expander行的大小时,当Expander的内容看起来消失但是它不会调整行的大小以占用更少的空间时,会折叠Expander。我发现这是因为一旦用于调整大小,GridSplitter就会将行的高度值从Auto设置为其他值。
从那里开始明显的解决方法似乎是使用DataTrigger在Expander崩溃时将行高重置为Auto。我选择了一个带有Setter的DataTrigger,这样当Expander再次展开时,它的最后一个Height值就会恢复(这是我对setter如何工作的理解)。
在实践中,DataTrigger正在触发,但由于某种原因,setter似乎没有像我想要的那样设置Height属性。我尝试使用EnterAction和一个故事板在同一个DataTrigger中将高度值设置为auto,并且它有效。不利的一点是,我没有办法将高度值恢复到拆分器在折叠之前的高度值,这会导致GridSplitter的奇怪行为。无论哪种方式,故事板工作的事实告诉我,DataTrigger实际上触发了它只是Setter不工作。
如果实际上被触发,为什么我的Setter不工作?