【发布时间】:2010-12-31 13:32:36
【问题描述】:
我有一个带有几列的 wpf 工具包数据网格,然后在行详细信息中我有另一个数据网格。基本上我正在模拟一个 treelistview 控件(例如:http://www.codeproject.com/KB/list/treelistview.aspx),但使用的是数据网格。
我想将行详细信息中数据网格的列宽与主父数据网格的列宽同步。
我尝试像这样定义一个子数据网格列:
<toolkit:DataGridTextColumn Binding="{Binding Path=Name}" Width="{Binding ElementName=mainDataGrid, Path=Columns[0].ActualWidth}" />
这不起作用(即使有一些变体,例如 Mode=OneWay)。
编辑:
好吧,我放弃了让绑定工作。正在尝试使用代码... 现在,由于 DataGrid 不会触发更改列宽的事件,所以我自己制作了:
PropertyDescriptor pd = DependencyPropertyDescriptor.FromProperty(DataGridColumn.WidthProperty, typeof(DataGridColumn));
pd.AddValueChanged(testColumn, new EventHandler(mainDataGrid_WidthPropertyChanged));
private void mainDataGrid_WidthPropertyChanged(object sender, EventArgs e)
{
// this works fine, but how do I find my templated child datagrid?
}
该事件似乎正确触发,但我似乎找不到我的模板化数据网格。每行都有一个行详细信息部分,但可以隐藏部分或全部。但即使我的行详细信息可见,我仍然找不到对它的引用(始终为空)。
DataGrid dg = mainDataGrid.FindChild(null, typeof(DataGrid)) as DataGridRow; // dg always null
这是使用我知道有效的“FindChild”方法。 任何人都知道问题可能是什么?或者有什么其他建议?谢谢
【问题讨论】:
标签: wpf .net-3.5 datagrid binding