WPF DataTrigger不会设置RowDefinition

时间:2016-03-30 17:37:25

标签: .net wpf datatrigger expander

在我的应用程序中,我有一个带有此代码段的视图:

<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不工作?

0 个答案:

没有答案