我試圖做一些看起來應該是非常簡單的東西,但我看不出如何。我有一個非常簡單的佈局,一個帶有圖像旁邊的TextBox,類似於它可能在WinForms應用程序中使用ErrorProvider裝飾的方式。問題是,我希望圖像不超過它旁邊的文本框。如果我躺在出來這個樣子,說:如何將容器的高度限制爲特定內容元素的高度?
<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
。我相信這是錯誤的。但是,什麼是對的?
編輯
這裏是什麼樣子我錯了一個例子:在這兩種佈局(這兩者都是水平StackPanel
S)時,FontSize
是唯一的變量:
您可以看到第一個TextBox
被限制在圖標的高度,結果在文本下面有不必要的底部填充。第二個圖標旁邊的圖標超出了TextBox
的位置。
碰巧,我發現了一個完全不同的(並且更好)的方式來解決這個問題 - 本來我是通過在Window
改變FontSize
縮放我的佈局,但使用ScaleTransform
是輕鬆許多,似乎完美地工作。但即便如此,我仍然覺得很難做到這一點。
好吧,就像我說的,這是一個天真的解決方案,我懷疑這是錯誤的 - 不是因爲它不會工作,而是因爲綁定到ActualHeight和ActualWidth會導致真正明顯的性能問題。 – 2010-06-12 17:28:25
我使用這個想法保持圖像的高度與組合框中的高度文本相同,並取得了很好的成功。 – Zamboni 2010-06-12 23:23:59