我有这样的模板
<Window.Resources>
<DataTemplate x:Key="MemberCoefDataTemplate">
<StackPanel>
<CheckBox Name="CheckBox"></CheckBox>
<TextBox Name="TextBox"></TextBox>
</StackPanel>
</DataTemplate>
</Window.Resources>
我在网格中使用它
<DataGridTemplateColumn CellTemplate="{StaticResource MemberCoefDataTemplate}" />
我需要动态地向网格添加列。作为Binding我使用索引器属性。所以我需要动态设置绑定,因为我不知道绑定到哪个索引。当我只是为了测试尝试这个
var column = new DataGridTemplateColumn();
column.CellTemplate = (DataTemplate)Application.Current.MainWindow.Resources["MemberCoefDataTemplate"];
TextBox tb = column.CellTemplate.FindName("TextBox", dg) as TextBox;
我得到了InvalidOperationException机智描述:
此操作仅对已应用此模板的元素有效
答案 0 :(得分:0)
通常在设置时间内获取控件,您必须调用方法LoadContent();
我会尝试column.CellTemplate.LoadContent()
。
答案 1 :(得分:0)
您可以在他的博客上找到Josh Smith here撰写的关于您的问题(以及课程解决方案)的完整说明。
确实,这是DataGridTemplateColumn
应用DataTemplate
:
private FrameworkElement LoadTemplateContent(bool isEditing, object dataItem, DataGridCell cell)
{
DataTemplate dataTemplate;
DataTemplateSelector dataTemplateSelector;
this.ChooseCellTemplateAndSelector(isEditing, out dataTemplate, out dataTemplateSelector);
if (dataTemplate != null || dataTemplateSelector != null)
{
ContentPresenter contentPresenter = new ContentPresenter();
BindingOperations.SetBinding(contentPresenter, ContentPresenter.ContentProperty, new Binding());
contentPresenter.ContentTemplate = dataTemplate;
contentPresenter.ContentTemplateSelector = dataTemplateSelector;
return contentPresenter;
}
return null;
}
如您所见,使用了ContentPresenter
。