【发布时间】:2011-03-02 21:28:17
【问题描述】:
我正在尝试做一些看起来应该非常简单的事情,但我不知道该怎么做。我有一个非常简单的布局,一个 TextBox 旁边有一个图像,类似于 WinForms 应用程序中装饰有 ErrorProvider 的方式。问题是,我希望图像不高于它旁边的 TextBox。如果我这样布置,说:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" MinWidth="100"/>
<Image Grid.Row="0" Grid.Column="1" Source="error.png" />
</Grid>
如果图像高于文本框,则该行将调整为图像的高度。如果我使用 DockPanel 或 StackPanel,也会发生这种情况。
天真的解决方案是将Height 绑定到TextBox 的ActualHeight。我确定这是错误的。但是什么是对的?
编辑
以下是我认为错误的示例:在这两种布局中(都是水平的StackPanels),FontSize 是唯一的变量:
您可以看到第一个TextBox 被限制为图标的高度,因此在文本下方有一个不必要的底部填充。第二个旁边的图标与它旁边的TextBox 不成比例。
碰巧,我找到了一种完全不同(而且更好)的方法来解决这个问题 - 最初我是通过更改 Window 上的 FontSize 来缩放我的布局,但使用 ScaleTransform 是一个整体容易得多,似乎工作得很好。但即便如此,我仍然觉得很难做到这一点。
【问题讨论】:
标签: wpf layout size panel element