【发布时间】:2017-06-11 06:22:54
【问题描述】:
我正在尝试将一个数据网格的标题宽度绑定到另一个数据网格的标题。
所以,我为父数据网格的每一行添加了一个数据网格。现在,我正在尝试使用父标题的列来控制子数据网格的列大小。
所以在最后一列的标题模板中,我添加了一个只有列标题的数据网格,没有行。在本专栏的单元格模板中,我添加了另一个数据网格,没有标题,只有数据行。
当我调整 headertemplate 数据网格列标题的大小时,XAML 中有什么方法可以调整单元格模板的数据网格列的大小。
阅读了很多关于 SO 的回答以及关于 CodeProject 等的一些帖子,但我无法让它发挥作用。有可能吗?
XAML
<Grid>
<DataGrid x:Name="Test"
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding AllAssets}"
CanUserResizeColumns="True">
<DataGrid.Resources>
<DataTemplate x:Key="NewKey2">
<DataGrid Name="dgC"
AutoGenerateColumns="False"
HeadersVisibility="None"
ItemsSource="{Binding months}"
CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Col1" Binding="{Binding value}" />
<DataGridTextColumn x:Name="Col2" Binding="{Binding MonthName}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
<DataTemplate x:Key="NewKey3">
<StackPanel>
<Label HorizontalAlignment="Center">All Headers</Label>
<DataGrid Name="dgH">
<DataGrid.Columns>
<DataGridTextColumn Width="{Binding ElementName=Col1, Path=ActualWidth}" Header="Value" />
<DataGridTextColumn Width="{Binding ElementName=Col2, Path=ActualWidth}" Header="Month" />
<!--Error or no result on these attempts
<DataGridTextColumn Header="Month" Width="{Binding Source={x:Reference Col2}, Path=ActualWidth}"/>--><!--
<DataGridTextColumn >
<DataGridTextColumn.Header>
<TextBlock Width="{Binding Source={x:Reference Col1}, Path=ActualWidth}" >Value</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Header="Month" />-->
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Id">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding id}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn CellTemplate="{StaticResource NewKey2}"
HeaderTemplate="{StaticResource NewKey3}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
C#类数据举例:
namespace WpfApplication1
{
public class Assets
{
public List<Asset> AllAssets { get; set; }
public Assets()
{
AllAssets = new List<Asset>();
for (int i = 1; i < 3; i++)
{
Asset asset = new Asset();
asset.id = i;
asset.name = "asset " + i.ToString();
for (int x = 1; x < 3; x++)
{
MonthsData months = new MonthsData();
months.MonthName = "Month " + x.ToString();
months.value = x;
asset.months.Add(months);
}
AllAssets.Add(asset);
}
}
}
public class Asset
{
public int id { get; set; }
public string name { get; set; }
public List<MonthsData> months { get; set; }
public Asset()
{
months = new List<MonthsData>();
}
}
public class MonthsData
{
public string MonthName { get; set; }
public int value { get; set; }
}
}
【问题讨论】:
-
尝试将子节点的 minwidth 属性绑定到父节点