Как показать полосу прокрутки в расширителе, когда содержимое выходит за пределы окна

Я использую два расширителя с TextBox один за другим. Во время написания текста TextBox динамически меняет высоту. Когда размер TextBox больше, чем размер родительского окна, полоса прокрутки не отображается. Вот пример:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="150">

    <Grid Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" Name="GridRow1"></RowDefinition>
            <RowDefinition Height="*" Name="GridRow2"></RowDefinition>
        </Grid.RowDefinitions>
        <Expander Grid.Row="0">
            <TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"/>
        </Expander>
        <Expander Grid.Row="1">
            <TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"/>
        </Expander>
    </Grid>
</Window>

Мне нужно установить максимальную высоту расширителя на половину размера родительского окна (размер окна можно изменить). Полоса прокрутки должна отображаться, если текст длиннее половины размера окна. Другое, когда оба расширителя закрыты, они должны быть близко друг к другу сверху.

Полоса прокрутки работает хорошо, когда в определении строки есть звездочка (*), но закрытый расширитель не вместе вверху.


person Ciboor    schedule 07.06.2013    source источник


Ответы (1)


Примените свое требование в Style DataTrigger для RowDefinition

<Grid Name="LayoutRoot">
  <Grid.RowDefinitions>
    <RowDefinition Name="GridRow1">
      <RowDefinition.Style>
        <Style TargetType="{x:Type RowDefinition}">
          <Setter Property="Height"
                  Value="*" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=expanderOne,
                                            Path=IsExpanded}"
                          Value="False">
              <Setter Property="Height"
                      Value="Auto" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </RowDefinition.Style>
    </RowDefinition>
    <RowDefinition Name="GridRow2"
                    Height="*" />
  </Grid.RowDefinitions>
  <Expander x:Name="expanderOne"
            Grid.Row="0">
    <TextBox TextWrapping="Wrap"
              VerticalScrollBarVisibility="Auto" />
  </Expander>
  <Expander Grid.Row="1">
    <TextBox TextWrapping="Wrap"
              VerticalScrollBarVisibility="Auto" />
  </Expander>
</Grid>
person Viv    schedule 07.06.2013
comment
Да это оно. Спасибо. - person Ciboor; 07.06.2013