WPF网格 - 具有最小高度限制的自动调整大小

时间:2016-06-14 11:26:29

标签: c# wpf xaml layout expression-blend

背景

我需要一个具有以下布局属性的网格:

  1. 4行:标题,主要内容,子内容,页脚
  2. 标题是静态内容,不会受到resize的影响
  3. 主要内容需要填满所有可用空间,最小高度为180
  4. 子内容是可以缩小和增长的RTB。这个子内容可能占用一些主要内容空间,但应该总是为主内容留下180像素。理想情况下,子内容应占用所需的最小面积。如果网格中没有剩余空间,RTB应该停止增长,而是启用其内部滚动查看器。
  5. 页脚就像标题,静态内容不受调整大小
  6. 问题

    子内容(find -exec)不会自动调整大小以适应剩余空间,也不会启用垂直滚动条。这导致主要内容下方的任何内容在窗口外剪辑。

    问题

    如何让RTB缩小以显示页脚,允许用户滚动隐藏的RichTextBox内容,同时允许RichTextBox扩展,如果用户伸展窗口?

    下面你会发现一个SSCCE,它展示了我正在努力实现的目标及其导致的问题

    RichTextBox

    以下是窗口最小尺寸时的图像:

    enter image description here

    这是窗口拉伸后显示所有窗口的图像:

    enter image description here

    额外信息

    我知道如果我将子内容<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinWidth="200" MinHeight="300" Width="200" Height="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*" MinHeight="180"/> <RowDefinition Height="Auto"/> <RowDefinition Height="10"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="Header" HorizontalAlignment="Center"/> <Rectangle Grid.Row="1" Fill="Red"/> <RichTextBox Grid.Row="2" VerticalScrollBarVisibility="Visible" Height="Auto" Margin="0,5,0,0" VerticalAlignment="Stretch" BorderBrush="#FF818181" BorderThickness="0.5" Background="#FFEEEEEE" FontSize="14"> <FlowDocument> <List> <ListItem> <Paragraph>Lorem</Paragraph> <Paragraph>IpSum</Paragraph> <Paragraph>Lorem</Paragraph> <Paragraph>IpSum</Paragraph> </ListItem> </List> </FlowDocument> </RichTextBox> <TextBlock Grid.Row="3" Text="Footer" HorizontalAlignment="Center"/> </Grid> </Window> 设置为RowDefinition,那么*可以正常工作,除了因为它需要太多空间当窗口扩展时。我需要此区域占用与RichTextBox一样多的空间,同时表现得像Auto

1 个答案:

答案 0 :(得分:2)

分而治之

frob(obj)

转换器:

frizzle(obj)

请注意,要使转换器提供所需的结果,MainGrid的高度不得超过窗口中内容的高度。