访问嵌入在按钮中的按钮时遇到问题 DataGridTemplateColumn.HeaderTemplate。按钮创建正常,可以将事件附加到按钮。一切正常,除了试图从后面的代码访问,例如:btnbutton.IsEnabled = false;返回错误并表示该对象不存在。我用各种版本的.NET测试了这个,最高可达到4.5并得到相同的结果,btnButton不存在。
我用ListView对象做了同样的事情,它工作正常。
<DataGrid Name="dgTest1" ItemsSource="{Binding} AutoGenerateColumns="False"
<DataGrid.Columns>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Name="btnButton" Content="One Button" WinWidth="100"></Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGrid.Columns>
</DataGrid>
Code Behind:btnButton.IsEnabled = false;
有没有办法访问DataGrid模板标题中的按钮?
答案 0 :(得分:0)
您可以尝试这样的事情:
var aButton = templateName.ChildrenOfType<Button>().FirstOrDefault( b => b.Name == "btnButton" );
答案 1 :(得分:0)
您不能像这样访问模板控件,您需要应用模板然后找到它们
您需要先在DataGrid标题上调用apply模板,然后再调用
var button = dgTest1.template.findname("btnButton", dgTest1)
答案 2 :(得分:0)
我认为这里的正确方法是将按钮绑定到视图模型上的属性:
<Button IsEnabled="{Binding IsButtonEnabled}" Content="One Button"/>
或命令(您可以实现自己的命令,在其中创建一个属性IsEnabled,并从CanExecute()方法返回此属性的值)。如果您需要更多详细信息,请与我们联系。