我做了一个简单的例子。有一个工具窗口。它以Grid为内容,有三个区域。第一个区域是带有一些文本的TextBox,第二个区域是Label,第三个区域是另一个TextBox。网格行的高度分别为:" *"," 30"," *"。对于我设置SizeToContent = SizeToContent.WidthAndHeight
的窗口。当我打开它时第一个TextBox的高度大于第二个TextBox的高度。当我尝试重新调整窗口时,高度按预期成比例。
窗口有xaml:
<Window
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"
mc:Ignorable="d"
x:Class="WpfApplication5.MainWindow"
Title="MainWindow" MinHeight="200" MinWidth="200"
DataContext="System.Data.DataSet" Width="291" d:DesignHeight="246"
WindowStyle="ToolWindow"
SizeToContent="WidthAndHeight">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox x:Name="Text1" />
<Label Grid.Row="1" Content="SOME TEXT"/>
<TextBox x:Name="Text2" Grid.Row="2"/>
</Grid>
</Window>
代码背后:
using System.Data;
using System.Windows;
namespace WpfApplication5
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
Text1.Text =
"some text\nsome text\nsome text\nsome text\nsome text\nsome text\nsome text\nsome text\nsome text\n";
}
}
}
我的问题是:如何解决这些跳跃高度?最初高度应该是成比例的。
初始图片:
调整大小后(加载时我想要的):
答案 0 :(得分:1)
您的样本可以正常工作。 大小从childs到root计算。因此,您的TextBox具有较大高度的内容,然后Grid使第一行和第三行相等,然后 Window.SizeToContent =“WidthAndHeight”适合/最小化所有大小与其内容的大小。 因此,您会看到没有空闲空间的窗户。
当您触发窗口调整大小时,规则SizeToContent变为false,因为您手动设置窗口大小并且可以重新计算。所以网格行的大小相等。
要检查它,您可以:
或添加例如KeyDown事件,如
private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
{
SizeToContent = SizeToContent.WidthAndHeight;
}
所以在开始时网格行将有不同的大小,在调整大小后,它们变得相等,但是如果按任意键,窗口会立即最小化其大小并且网格行将不相等。
答案 1 :(得分:1)
在渲染初始网格后,似乎{em}应用了SizeToContent
。因此,最初使用两个大小相同的文本框计算网格,然后应用SizeToContent
并将所有控件调整为最小尺寸。
作为解决方法,您可以将SharedSizeGroup
应用于网格行,以便在SizeToContent
尝试调整所有内容时强制它们具有相同的大小。
<Window ...
WindowStyle="ToolWindow"
SizeToContent="WidthAndHeight">
<Grid Grid.IsSharedSizeScope="True">
<Grid.RowDefinitions>
<RowDefinition Height="*" SharedSizeGroup="A"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*" SharedSizeGroup="A"/>
</Grid.RowDefinitions>
<TextBox x:Name="Text1" />
<Label Grid.Row="1" Content="SOME TEXT"/>
<TextBox x:Name="Text2" Grid.Row="2"/>
</Grid>
</Window>
然后在初始加载时,它看起来像这样: