我很好奇,如果這可以做...我有一個網格,包含多行。由於各種設計原因,我想保持行的高度爲height="Auto"
。列表框橫跨網格中的三行。除非我將其高度設置爲特定的(height="70"
),否則在添加或刪除項目時,它會動態調整其高度,同時還要調整行的高度,因爲它們設置爲Auto
。這是一種正常的行爲,所有事情都應該發揮作用 - 我只是想解決這個問題。控制WPF列表框高度而不設置特定的值,並且將行的高度設置爲自動?
有沒有一種方法可以讓這個列表框在它佔據的行的當前高度內垂直拉伸,而不直接控制行的高度?據我所知,行的高度屬性設置爲Auto
會導致它根據其內容展開和收縮,但是我想知道是否可以阻止我的ListBox擁有該權限,同時允許其他項目執行正常的操作。
我可以在ListBox上得到一個相當精確的靜態高度,使整個界面看起來不錯,但是我希望能讓它伸展並佔據指定行的空間,同時保持行的高度爲Auto
,其他內容除了那個ListBox。
如果無法做到,有沒有人有我想要完成的建議?
編輯:
基於Sheridan的出色答卷,我能夠達到預期的結果。這是使所有事情都發生的代碼(另請參閱Sheridan的代碼)。
public class SumConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
double sum = 0;
foreach (var val in values)
{
sum += (double)val;
}
return sum;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException(); // Didn't implement this part yet...
}
}
<Window ....
xmlns:c="clr-namespace:DSTG.Converters
....>
<Window.Resources>
<c:HeightSumConverter x:Key="SumConverter"/>
<Window.Resources>
<ListBox>
<ListBox.Height>
<MultiBinding Converter="{StaticResource SumConverter}">
<Binding Path="ActualHeight" ElementName="txtDat1"/>
<Binding Path="Margin.Bottom" ElementName="txtDat1"/>
<Binding Path="ActualHeight" ElementName="txtDat2"/>
<Binding Path="Margin.Bottom" ElementName="txtDat2"/>
<Binding Path="ActualHeight" ElementName="txtDat3"/>
</MultiBinding>
</ListBox.Height>
</ListBox>
上面的代碼也佔了兩三個控件的底部邊緣,讓一切都對齊
您是否嘗試過將VerticalAlignment設置爲Stretch? – jugg1es
@ jugg1es我有。同樣的行爲。這是因爲沒有什麼限制ListBox的高度,並且由於其高度=「自動」設置,行正在拉伸。 –
您是否知道該行中的哪個控件具有最大高度?你有沒有嘗試綁定列表框的高度到這個控件的高度? – Athari