我正在以编程方式用行填充 WPF 网格。每行都分配有一个用户控件。该用户控件本身包含一个网格,只有一行和三列。第三列可以包含一个文本框、一个组合框或列表框中可变数量的复选框。
虽然我已将用户控件和包含用户控件的网格中的行高设置为“自动”,但行高并未扩展。下方的复选框就会消失。我尝试过不同的事情,但还没有运气。有任何想法吗?
要从 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”。
您可以在自己后面的代码中计算行高...
myGrid.RowHeight = myGrid.RenderSize.Height / myGrid.ItemsSource.Cast<MyRowDef>().Count();
如果使用了HandyControl库,那么dataGrid的行高会固定,使用以下代码改变行高为自适应
<DataGrid.Style>
<Style BasedOn="{StaticResource DataGridBaseStyle}"
TargetType="DataGrid" >
<Setter Property="RowHeight" Value="{x:Static sys:Double.NaN}">
</Setter>
</Style>
</DataGrid.Style>
嗨,尝试这样的事情
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Height" Value="Auto"/>
</Style>
</DataGrid.RowStyle>
</DataGrid>
在代码隐藏中
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;
我希望这会有所帮助。