以编程方式填充wpf中的网格:自动rowheight似乎不起作用

时间:2012-07-13 14:31:37

标签: c# .net wpf user-controls grid

我正在以编程方式使用行填充WPF网格。每行都分配了一个用户控件。此用户控件包含一个Grid本身,只有一行和三列。第3列可以在ListBox中包含TextBox,ComboBox或可变数量的CheckBox。

虽然我已将用户控件中的rowheight和包含用户控件的Grid设置为Auto,但行的高度不会扩展。较低的复选框刚刚消失。我尝试了不同的东西,但没有运气。有任何想法吗?

3 个答案:

答案 0 :(得分:3)

对于从XAML设置“自动”宽度或高度,您可以使用double.Nan而不是“Value =”Auto“”。

<DataGrid>
   <DataGrid.RowStyle>
      <Style TargetType="{x:Type DataGridRow}">
         <Setter Property="Height" Value="{x:Static sys:Double.NaN}"/>
      </Style>
   </DataGrid.RowStyle
</DataGrid>

不要忘记添加

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

在XAML的头部使用“sys”。

答案 1 :(得分:0)

嗨尝试这样的事情

    <DataGrid>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Setter Property="Height" Value="Auto"/>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
在codebehind中

DataGrid dg=new DataGrid();
        Style style = new Style(typeof(DataGridRow));
        style.Setters.Add(new Setter(DataGridRow.HeightProperty,new GridLength(20, GridUnitType.Auto)));
        dg.RowStyle=style;

我希望这会有所帮助。

答案 2 :(得分:0)

您可以在自己背后的代码中计算行高......

myGrid.RowHeight = myGrid.RenderSize.Height / myGrid.ItemsSource.Cast<MyRowDef>().Count();