[英]Binding Height from code behind
我有一个自定义GridView之类的控件,该控件由Grid面板制成,每行都有几个控件(所有控件都来自System.Windows.Controls)。
用户要求行的高度不受控件内容的限制而增长。 我在维护每行中所有控件相对于最高控件的大小方面存在问题。
我正在尝试将每行中所有控件的Height单向绑定到RowDefenition ActualHeight属性。 但它没有按我预期的那样工作(每个控件将其自身的大小保持在最小)
任何帮助将不胜感激,谢谢。
这是我尝试绑定的代码:
RowDefinition rowDef = new RowDefinition();
cellsGrid.RowDefinitions.Add(rowDef);
rowDef.Name = "gvRow" + cellsGrid.RowDefinitions.Count;
cellsGrid.Children.Add(controlToAdd);
Grid.SetRow(controlToAdd, rowIndex);
Grid.SetColumn(controlToAdd, columnIndex);
Binding bindH = new Binding("ActualHeight");
bindH.Mode = BindingMode.OneWay;
bindH.Source = rowDef;
BindingOperations.SetBinding(controlToAdd,RowDefinition.HeightProperty, bindH);
controlToAdd.TabIndex = (totalTabIndex + 1); totalTabIndex++;
cell.CellElement = controlToAdd;
cell.EndEdit += new GridViewCell.GridViewEditHandler(cell_EndEdit);
尝试将控件的VerticalAlignment
设置为Stretch
,使其扩展以填充所有可用空间。
另外,我不认为RowDefinition
具有ActualHeight
属性,因此绑定可能没有任何结果。 您需要绑定到控件的ActualHeight
,但是只有在渲染之后才知道该值。 我想您可以使用Dispatcher.Invoke
在控件呈现后运行某些东西,弄清楚哪个是该行中最高的控件,并将所有项目设置为该高度。
您可以使用C#代码将控件的高度(或任何属性)与其他控件的高度绑定。 这是例子。
Grid myGrid = new Grid();
ListBox myList = new ListBox(); //it could be any control
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
myList.DataContext = this;
myList.SetBinding(UserControl.HeightProperty,"this.myGrid.ActualHeight");
}
这对我有用。
您应该在XAML中而不是在代码隐藏中进行Height绑定。
使用控件上的HorizontalAlignment =“ Stretch” VerticalAlignment =“ Stretch”属性。
或者,使用Height =“ {Binding ElementName = LayoutRoot,Path = ActualHeight}绑定主网格的实际高度。
<ItemsControl ItemsSource="{Binding items}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:Class1}">
<Grid Height="{Binding YourHeightValue}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding prop1}"/>
<TextBlock Grid.Column="1" Text="{Binding prop2}"/>
<TextBlock Grid.Column="2" Text="{Binding prop3}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.