C# WPF DataGridTemplateColumn.HeaderTemplate问题
在访问嵌入到应用程序中的按钮时遇到问题 DataGridTemplateColumn.HeaderTemplate。按钮创建得很好,可以将事件附加到按钮。除了试图从代码隐藏中获取访问权限外,所有操作都可以正常工作,例如:btnbutton.IsEnabled=false;返回一个错误,并表示该对象不存在。我已经用各种版本的.NET 4.5进行了测试,得到了相同的结果,btnButton不存在 我对ListView对象也做了同样的操作,效果很好C# WPF DataGridTemplateColumn.HeaderTemplate问题,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,在访问嵌入到应用程序中的按钮时遇到问题 DataGridTemplateColumn.HeaderTemplate。按钮创建得很好,可以将事件附加到按钮。除了试图从代码隐藏中获取访问权限外,所有操作都可以正常工作,例如:btnbutton.IsEnabled=false;返回一个错误,并表示该对象不存在。我已经用各种版本的.NET 4.5进行了测试,得到了相同的结果,btnButton不存在 我对ListView对象也做了同样的操作,效果很好 <DataGrid Name="dgTest
<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>
隐藏代码:btnButton.IsEnabled=false;
有没有办法访问DataGrid模板标题中的按钮?您可以尝试以下方法:
var aButton = templateName.ChildrenOfType<Button>().FirstOrDefault( b => b.Name == "btnButton" );
您不能像那样访问模板控件,您需要应用模板,然后找到它们 您需要首先在DataGrid头上调用apply模板,然后
var button = dgTest1.template.findname("btnButton", dgTest1)
我认为正确的方法是将按钮绑定到视图模型上的属性:
<Button IsEnabled="{Binding IsButtonEnabled}" Content="One Button"/>
或者,对于一个命令,您可以实现自己的命令,在其中创建一个属性IsEnabled,并从CanExecute方法返回该属性的值。如果您需要更多详细信息,请告诉我。您不能像那样访问此按钮,因为此按钮可能根本不存在-它只是一个模型。如果要获取它,需要使用VisualTreeHelper,或者可以将此Button.Tag绑定到某个属性,并在此属性上实现INotifyPropertChanged。是否尝试过获取wpf控件的旧GetChildControl方法?在模板中启用/禁用按钮时从代码中启用/禁用按钮是一种不好的方法。使用触发器。