WPF:当另一个对象增加时,自动收缩网格中的对象

时间:2018-07-11 14:13:23

标签: c# .net wpf windows

我正在为Windows构建一个聊天应用程序,并且主应用程序屏幕是从两个不同的视图构建的。第一个是用于消息的ListBox,另一个是用于文本输入的RichTextBox。

RichTextBox具有MaxHeight的属性,当用户将文本分配到框中时可以扩展到该属性。但是,当文本框被展开并且与ListBox视图重叠时,就会出现问题。

我不知道如何在扩展时强制将ListBox缩小到TextBox的高度

示例:

enter image description here XAML的一部分:

<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>         

1 个答案:

答案 0 :(得分:1)

您应该尝试使用网格的RowDefinitionHeight="*"表示它将填充剩余的空间,而不考虑其内容。 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>