假如我在前台C1Datagrid中写了一个模板列,列里放有一个控件,如何在后台取到该控件
<c1:DataGridTemplateColumn Name="col1" Header="col1" Width="75"><c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="chk1"></CheckBox>
</DataTemplate>
</c1:DataGridTemplateColumn.CellTemplate>
</c1:DataGridTemplateColumn>
如何在后台通过代码,直接取到chk1?
在WPF平台下从DataTemplate下获取控件,需要从逻辑树上获取。
可以使用WPF平台的VisualTreeHelper方法去获取逻辑树的元素(写代码通过控件的名称在逻辑树上查找),详细的使用方法可以参考微软的msdn。
如果是进入编辑状态,可以拿到EditElment,获取到这个控件。
void grid_BeganEdit(object sender, DataGridBeganEditEventArgs e)
{
var ch= e.EditingElement as CheckBox;
if (ch!= null)
{ }
}
Alice 发表于 2016-4-28 17:00
在WPF平台下从DataTemplate下获取控件,需要从逻辑树上获取。
可以使用WPF平台的VisualTreeHelper方法去获 ...
并不好取得 C1DataGrid的Column并没有GetCellContent方法,只有GetCellEditingContent方法,然而我并没有设置CellEditingTemplate(我想让他可以直接操作,而不用点一下进入编辑模式) 高级大宅男 发表于 2016-4-28 18:06
并不好取得 C1DataGrid的Column并没有GetCellContent方法,只有GetCellEditingContent方法,然而我并没有 ...
在WPF下可以通过名字在VirtualTree上获取。
从VirtualTree上通过名字获取控件的方法参考:
public static T FindVisualChildByName<T>(Visual parent, string name) where T : Visual
{
if (parent != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i) as Visual;
string controlName = child.GetValue(Control.NameProperty) as string;
if (controlName == name)
{
return child as T;
}
else
{
T result = FindVisualChildByName<T>(child, name);
if (result != null)
return result;
}
}
}
return null;
}
页:
[1]