假设我有一个具有6个属性的对象:
我这样填充我的Grid,按“Attribute1”分组...
现在它看起来是这样的... 这些列不仅非常窄...而且不能像通常那样用鼠标改变大小。
这个问题真的让我感到困惑。我在SO上搜索了一下,并尝试了几个相关问题,但没有找到任何解决方法。
如何设置嵌套DataGrid上的列使用相对宽度?
public class MyClass
{
public string Attribute1 { get; set; }
public string Attribute2 { get; set; }
public string Attribute3 { get; set; }
public string Attribute4 { get; set; }
public string Attribute5 { get; set; }
public string Attribute6 { get; set; }
}
我在 DataGrid 中显示了这些对象的集合:
<Grid>
<DataGrid x:Name="myGrid" Margin="5, 5, 5, 5" AutoGenerateColumns="False" CanUserAddRows="False" IsReadOnly="True">
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Attribute1" Binding="{Binding Attribute1}" Width="5*"/>
<DataGridTextColumn Header="Attribute2" Binding="{Binding Attribute2}" Width="5*"/>
<DataGridTextColumn Header="Attribute3" Binding="{Binding Attribute3}" Width="10*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
我这样填充我的Grid,按“Attribute1”分组...
public MainWindow()
{
InitializeComponent();
ObservableCollection<MyClass> data = new ObservableCollection<MyClass>();
data.Add(new MyClass { Attribute1 = "Red", Attribute4 = "Circle", Attribute5 = "Large", Attribute6 = "Transparent" });
data.Add(new MyClass { Attribute1 = "Red", Attribute4 = "Square", Attribute5 = "Medium", Attribute6 = "Opaque" });
data.Add(new MyClass { Attribute1 = "Red", Attribute4 = "Triangle", Attribute5 = "Large", Attribute6 = "Opaque" });
data.Add(new MyClass { Attribute1 = "Yellow", Attribute4 = "Square", Attribute5 = "Large", Attribute6 = "Transparent" });
data.Add(new MyClass { Attribute1 = "Blue", Attribute4 = "Triangle", Attribute5 = "Small", Attribute6 = "Transparent" });
data.Add(new MyClass { Attribute1 = "Blue", Attribute4 = "Sphere", Attribute5 = "Small", Attribute6 = "Opaque" });
ListCollectionView lcv = new ListCollectionView(data);
lcv.GroupDescriptions.Add(new PropertyGroupDescription("Attribute1"));
myGrid.ItemsSource = lcv;
}
我将我的GroupItems样式设置为在展开器中显示嵌套的DataGrid:
<Window.Resources>
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="exp" IsExpanded="True" Foreground="Black">
<Expander.Header>
<TextBlock Foreground="Black" Text="{Binding Name}"/>
</Expander.Header>
<DockPanel>
<DataGrid ItemsSource="{Binding Items}" x:Name="subGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Attribute 4" Binding="{Binding Attribute4}" Width="Auto"/>
<DataGridTextColumn Header="Attribute 5" Binding="{Binding Attribute5}" Width="Auto"/>
<DataGridTextColumn Header="Attribute 6" Binding="{Binding Attribute6}" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
如果我将嵌套的DataGrid列宽设置为“自动”……它非常出色:
问题是当我尝试使用相对宽度时……
<DataGrid ItemsSource="{Binding Items}" x:Name="subGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Attribute 4" Binding="{Binding Attribute4}" Width="1*"/>
<DataGridTextColumn Header="Attribute 5" Binding="{Binding Attribute5}" Width="1*"/>
<DataGridTextColumn Header="Attribute 6" Binding="{Binding Attribute6}" Width="2*"/>
</DataGrid.Columns>
</DataGrid>
现在它看起来是这样的... 这些列不仅非常窄...而且不能像通常那样用鼠标改变大小。
这个问题真的让我感到困惑。我在SO上搜索了一下,并尝试了几个相关问题,但没有找到任何解决方法。
如何设置嵌套DataGrid上的列使用相对宽度?