首页 > 解决方案 > 动态更改按钮内容

问题描述

datagrid 有一个DatagridTemplateColumn 和一些DataGridTexColumn

Into DatagridTemplateColumn I 将按钮插入HeaderTemplate 并插入CellTemplate

在单击按钮上,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

标签: c#wpfxaml

解决方案


我尝试使用复选框,但是当我循环查看是否选中了复选框时,系统在 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 是我在数据网格上看到的行数


推荐阅读