родительский контейнер не сжимается при распаковке Expander

57
1

У меня есть элемент управления Expander внутри пограничного элемента управления. Когда Expander сбрасывается, граница сохраняет ту же высоту. Как заставить Border также изменить высоту? Код, который освещает проблему:

    <Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.Resources>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="2" />
</Style>
<Style TargetType="StackPanel" x:Key="StackPanel1">
<Setter Property="Orientation" Value="Vertical"/>
<Setter Property="MaxHeight" Value="100" />
</Style>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" x:Key="panelBackgroundBrush">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#FFE3EFFF" Offset="0" />
<GradientStop Color="#FFAFD2FF" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<Style TargetType="{x:Type GridSplitter}">
<Setter Property="FrameworkElement.Height" Value="3"/>
<Setter Property="UIElement.SnapsToDevicePixels" Value="True" />
<Setter Property="UIElement.Focusable" Value="False" />
<Setter Property="FrameworkElement.Cursor" Value="SizeNS"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Border BorderThickness="0" BorderBrush="{StaticResource panelBackgroundBrush}">
<Canvas Width="19" Height="3">
<Canvas.Resources>
<Style TargetType="Rectangle">
<Setter Property="Width" Value="2" />
<Setter Property="Height" Value="2" />
<Setter Property="Canvas.Top" Value="0" />
</Style>
</Canvas.Resources>
<Rectangle Fill="{StaticResource panelBackgroundBrush}" Canvas.Left="1" />
<Rectangle Fill="{StaticResource panelBackgroundBrush}" Canvas.Left="5" />
<Rectangle Fill="{StaticResource panelBackgroundBrush}" Canvas.Left="9" />
<Rectangle Fill="{StaticResource panelBackgroundBrush}" Canvas.Left="13" />
<Rectangle Fill="{StaticResource panelBackgroundBrush}" Canvas.Left="17" />
<Rectangle Fill="{TemplateBinding TextElement.Foreground}" Canvas.Left="0" />
<Rectangle Fill="{TemplateBinding TextElement.Foreground}" Canvas.Left="4" />
<Rectangle Fill="{TemplateBinding TextElement.Foreground}" Canvas.Left="8" />
<Rectangle Fill="{TemplateBinding TextElement.Foreground}" Canvas.Left="12" />
<Rectangle Fill="{TemplateBinding TextElement.Foreground}" Canvas.Left="16" />
</Canvas>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Border>
<Expander>
<Border>
<StackPanel Style="{StaticResource ResourceKey=StackPanel1}" >
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
</StackPanel>
</Border>
</Expander>
</Border>
<Border Grid.Row="1">
<Expander>
<Border>
<StackPanel Style="{StaticResource ResourceKey=StackPanel1}" >
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
</StackPanel>
</Border>
</Expander>
</Border>
<GridSplitter Grid.Row="1" />
<Border Grid.Row="2">
<Expander>
<Border>
<StackPanel Style="{StaticResource ResourceKey=StackPanel1}" >
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
<TextBlock Text="aaaa"/>
</StackPanel>
</Border>
</Expander>
</Border>
<GridSplitter Grid.Row="2" />
</Grid>

спросил(а) 2012-11-22T21:08:00+04:00 7 лет, 11 месяцев назад
1
Решение
81

Для решения проблемы RowDefinition.Height необходимо было установить значение Авто.

ответил(а) 2012-11-26T20:58:00+04:00 7 лет, 11 месяцев назад
70

Лучший способ сделать это - установить границу для дочерней части док-панели и установить свойство LastChildFill для панели док-станции как истину. Вот пример:

<DockPanel LastChildFill="True">
<Border>
<Expander Name="PropertiesExpander2"
ExpandDirection="Left"
IsExpanded="False"
DockPanel.Dock="Right">
</Expander>
</Border>

<Border>
//Here you can add other controls
</Border>
</DockPanel>

ответил(а) 2012-11-22T21:42:00+04:00 7 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема