代码后面的绑定高度

本文关键字:绑定 高度 代码 | 更新日期: 2023-09-27 18:18:55

我有一个自定义的GridView控件,由网格面板组成,每一行有几个控件(它们都来自System.Windows.Controls)。

用户要求行高度随控件的内容无限制地增长。我在维持每行中所有控件的大小与最高控件的关系时遇到了问题。

我试图将每一行中所有控件的高度单向绑定到rowdefentionactualheight属性。但它不工作,因为我期望它的工作(每个控件保持它自己的大小到最小)

任何帮助将不胜感激,谢谢。

这是我试图绑定的代码:

                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在控件渲染后运行一些东西,找出哪一个是行中最高的控件,并将所有项目设置为该高度。

应该在XAML中进行高度绑定,而不是在后台代码中。

在控件上使用horizontalalign ="Stretch" vertical align ="Stretch"属性。

可选,使用Height="{Binding ElementName=LayoutRoot, Path=ActualHeight}来绑定maingrid的实际高度。

<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>

你可以用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");
}