Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGridTemplateColumn.HeaderTemplate问题_C#_Wpf_Wpfdatagrid - Fatal编程技术网

C# WPF DataGridTemplateColumn.HeaderTemplate问题

C# WPF DataGridTemplateColumn.HeaderTemplate问题,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,在访问嵌入到应用程序中的按钮时遇到问题 DataGridTemplateColumn.HeaderTemplate。按钮创建得很好,可以将事件附加到按钮。除了试图从代码隐藏中获取访问权限外,所有操作都可以正常工作,例如:btnbutton.IsEnabled=false;返回一个错误,并表示该对象不存在。我已经用各种版本的.NET 4.5进行了测试,得到了相同的结果,btnButton不存在 我对ListView对象也做了同样的操作,效果很好 <DataGrid Name="dgTest

在访问嵌入到应用程序中的按钮时遇到问题 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>
隐藏代码: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方法?在模板中启用/禁用按钮时从代码中启用/禁用按钮是一种不好的方法。使用触发器。