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

问题描述 投票:0回答:4

我正在以编程方式用行填充 WPF 网格。每行都分配有一个用户控件。该用户控件本身包含一个网格,只有一行和三列。第三列可以包含一个文本框、一个组合框或列表框中可变数量的复选框。

虽然我已将用户控件和包含用户控件的网格中的行高设置为“自动”,但行高并未扩展。下方的复选框就会消失。我尝试过不同的事情,但还没有运气。有任何想法吗?

c# .net wpf user-controls grid
4个回答
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”。


0
投票

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

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

0
投票

如果使用了HandyControl库,那么dataGrid的行高会固定,使用以下代码改变行高为自适应

<DataGrid.Style>
  <Style BasedOn="{StaticResource DataGridBaseStyle}"  
       TargetType="DataGrid" >
      <Setter Property="RowHeight" Value="{x:Static sys:Double.NaN}"> 
       </Setter>
  </Style>
</DataGrid.Style>

-2
投票

嗨,尝试这样的事情

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

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.