WPF DataGridTemplateColumn.HeaderTemplate问题

时间:2015-04-24 13:28:27

标签: c# wpf wpfdatagrid

访问嵌入在按钮中的按钮时遇到问题 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模板标题中的按钮?

3 个答案:

答案 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()方法返回此属性的值)。如果您需要更多详细信息,请与我们联系。