动态更改按钮内容

时间:2019-05-06 16:30:06

标签: c# wpf xaml

我有一个datagrid,其中一个DatagridTemplateColumn和一些DataGridTexColumn

DatagridTemplateColumn中,我将一个按钮插入HeaderTemplateCellTemplate中。

HeaderTemplate的单击按钮上,我需要将所有CellTemplate的内容按钮更改为

XAML

<DataGridTemplateColumn>
 <DataGridTemplateColumn.HeaderTemplate>
  <DataTemplate>
   <Button Name ="BCAll" Height="20" Width="20" Background="White" Click="BCAll_Click" Content="" />
  </DataTemplate>
 </DataGridTemplateColumn.HeaderTemplate>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate x:Name="BCS">
   <Button Name ="BCSing" Height="20" Width="20" Background="White" Click="BCSing_Click" Content=""/>
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

c#:

private void BCAll_Click(object sender, RoutedEventArgs e)
{
    Button bot = (Button)sender;
    if (bot.Content == "")
    {
        bot.Content = ((char)0x221A).ToString();
        for (int i = 0; i < DTG_Can.Items.Count; i++)
        {
            Button CBM = DTG_Can.Columns[0].GetCellContent(DTG_Can.Items[i]) as Button;
            CBM.Content = ((char)0x221A).ToString();
        }
    }
    else
    {
        for (int i = 0; i < DTG_Can.Items.Count; i++)
        {
            Button CBM = DTG_Can.Columns[0].GetCellContent(DTG_Can.Items[i]) as Button;
            CBM.Content = "";
        }
    }
}

在点击BCAll_click事件时,系统会在System.nullReferenceException指令上返回CBM.Content

1 个答案:

答案 0 :(得分:0)

我尝试使用复选框,但是当我循环查看是否选中了复选框时,系统在30次迭代后会返回相同的错误。

for (int i = 0; i < DTG_Mod.Items.Count; i++)
{
 drv = (DataRowView)DTG_Mod.Items.GetItemAt(i);
 var item = DTG_Mod.Items[i];
 var CBM = DTG_Mod.Columns[0].GetCellContent(item) as CheckBox;
 if ((bool)CBM.IsChecked)
 { do something...

我看到30是我在数据网格上看到的行数