我正在为Windows构建一个聊天应用程序,并且主应用程序屏幕是从两个不同的视图构建的。第一个是用于消息的ListBox,另一个是用于文本输入的RichTextBox。
RichTextBox具有MaxHeight的属性,当用户将文本分配到框中时可以扩展到该属性。但是,当文本框被展开并且与ListBox视图重叠时,就会出现问题。
我不知道如何在扩展时强制将ListBox缩小到TextBox的高度
示例:
<Grid Margin="0,55,0,5" HorizontalAlignment="Stretch" >
<ListBox
global:ListBoxEx.AutoScrollToEnd="True"
ScrollViewer.ScrollChanged="Scroll_ScrollChanged"
VirtualizingStackPanel.IsVirtualizing="True"
BorderThickness="0"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
IsSynchronizedWithCurrentItem="True" Margin="0,0,0,61"
Padding="5,0,5,0" x:Name="Scroll"
HorizontalAlignment="Stretch">
</ListBox>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Background="White">
<Grid Margin="20,0,20,0">
<Border BorderThickness="0 2 0 0" Padding="0,0,0,5" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Height="40" FontSize="30" Margin="0" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="40"/>
<StackPanel Grid.Column="1" Orientation="Vertical" VerticalAlignment="Center" >
<TextBlock Margin="5,0,5,0" HorizontalAlignment="Left" />
<Border MinHeight="35" MaxHeight="200" Background="White" BorderThickness="20" BorderBrush="Black" >
<DockPanel LastChildFill="True" IsItemsHost="False">
<Grid>
<toolkit:RichTextBox VerticalScrollBarVisibility="Auto" FontSize="14" HorizontalAlignment="Stretch" VerticalAlignment="Center" VerticalContentAlignment="Center" BorderThickness="0" Margin="0,0,33,0">
<toolkit:RichTextBox.TextFormatter>
<local:InputFormatter />
</toolkit:RichTextBox.TextFormatter>
</toolkit:RichTextBox>
<Grid HorizontalAlignment="Right" Background="Transparent" Height="40" Width="40" VerticalAlignment="Bottom">
<Button FontSize="20" />
</Grid>
</Grid>
</DockPanel>
</Border>
</StackPanel>
<Button Grid.Column="2" Height="40" Width="40" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
</Grid>
</Border>
</Grid>
</Grid>
</Grid>
</Grid>
答案 0 :(得分:1)
您应该尝试使用网格的RowDefinition
。
Height="*"
表示它将填充剩余的空间,而不考虑其内容。
Height="Auto"
表示它将根据其内容进行扩展。
这是一个简单的示例,您可以适应您的代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
</ListBox>
<RichTextBox Grid.Row="1">
<FlowDocument>
<Paragraph FontSize="24">aaa</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>