我正在使用网格来平衡3个部分。前两个应占剩余空间的50%,后两个应保持底部相同的高度,因为它是一个带按钮的酒吧。当另一个设置为折叠时,WPF网格元素不会调整大小
我使用GridSplitter来允许动态调整前两个元素之间的大小,但删除它也不会改变任何东西。
这里是一个最小的工作例如:
XAML:
<Window x:Class="TestWPFApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestWPFApplication"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="rootGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox
x:Name="firstBox"
Grid.Row="0"
AcceptsReturn="True"
AcceptsTab="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<GridSplitter x:Name="splitter" Grid.Row="1" Height="5" HorizontalAlignment="Stretch" />
<TextBox
x:Name="secondBox"
Grid.Row="2"
AcceptsReturn="True"
AcceptsTab="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<Button Grid.Row="3" Content="Collapse" Click="Button_Click"/>
</Grid>
</Window>
CS:
namespace TestWPFApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
splitter.Visibility = Visibility.Collapsed;
secondBox.Visibility = Visibility.Collapsed;
}
}
}
点击按钮,第二个文本框和gridsplitter崩溃,所以我不能使用后他们(理想),但其余的文本框不占用其余的空间(不希望的)。
在我的理解中,行有一个高度的星,它应该自动调整它的空间。我是否需要调用像updateUI之类的函数,以便第一个文本框自动调整大小?
虽然这确实有效并且顶盒已调整大小,但这意味着我必须保存该值。我不明白为什么我需要DataBinding部分,因为MWE的内容位于我项目中的TabItem中,我只想提供一种可能性来减少第二个文本框,以便在第一个文本框中具有更多空间。你能解释为什么这是必要的吗?或者为什么它不能按我的预期工作。 – Crumar
如果你愿意,你可以在代码后面写这个,如果你不想手动设置'MaxHeight',你可以写'绑定'。我编辑了答案。 – bars222
嗯,我在函数中实现了这个,因为我需要保存MaxHeight的值来再次显示文本框。然而,我会等待更多的答案,因为我认为这更多的是解决方法。 upvoted虽然 – Crumar