WPF DataTrigger не будет устанавливать свойство Height RowDefinition

В моем приложении у меня есть представление с этим фрагментом:

<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), размер которой заполняет все пространство в сетке, не занятое другими строками, и расширитель внизу, который при расширении может быть изменен, чтобы быть выше или короче. .

Я обнаружил, что при сворачивании Expander после того, как GridSplitter уже использовался для изменения размера строки Expander, содержимое Expander исчезало, но размер строки не изменялся, чтобы занимать меньше места. Я узнал, что это связано с тем, что GridSplitter устанавливает значение высоты строки с Auto на что-то другое, когда оно используется для изменения размера.

Очевидный обходной путь оттуда, казалось, заключался в использовании DataTrigger для сброса высоты строки до Auto, когда Expander рушится. Я выбрал DataTrigger с сеттером, чтобы при повторном расширении расширителя восстанавливалось его последнее значение высоты (это мое понимание того, как работают сеттеры).

На практике DataTrigger срабатывает, но по какой-то причине установщик, похоже, не устанавливает свойство Height, как я этого хочу. Я попытался использовать EnterAction и раскадровку, чтобы установить значение высоты автоматически в одном и том же DataTrigger, и это сработало. Недостатком, однако, было то, что у меня не было возможности восстановить значение высоты до того значения, которое было у сплиттера до того, как оно было свернуто, и это вызывает странное поведение с GridSplitter. В любом случае тот факт, что раскадровка работала, говорит мне, что DataTrigger на самом деле запускает только то, что Setter не работает.

Почему мой сеттер не работает, если он на самом деле срабатывает?


person Kyle V.    schedule 30.03.2016    source источник
comment
По умолчанию и триггер оба устанавливают высоту на Авто. Это правильно?   -  person dkozl    schedule 30.03.2016
comment
По умолчанию он начинается с Auto, и я помещаю его в установщик, чтобы избежать этой проблемы, как описано в этом ответе и его комментариях: stackoverflow .com/a/19319456/1504964   -  person Kyle V.    schedule 30.03.2016