繁体   English   中英

从代码后面绑定高度

[英]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绑定。

使用控件上的Horizo​​ntalAlignment =“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM