You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复选框联动网格文本块:依次填充文本框功能实现问题

安全贴纸设计软件:复选框与网格TextBlock关联解决方案

需求回顾

开发安全贴纸设计软件时,需要实现:

  • 左侧危险类型复选框与右侧网格布局的TextBlock组关联
  • 勾选复选框时,按左上角→右上角→下一行左→下一行右的优先级,将勾选标题依次填充到网格的空白TextBlock中
  • 取消勾选时,自动更新网格内容,保持顺序连贯

原代码问题分析

你提供的代码存在以下核心问题:

  • 未监听复选框的状态变化,CheckBoxToModify方法无法触发
  • 错误地给网格grdSIMDUT设置行列属性,而非目标TextBlock
  • 变量t未定义,直接添加控件会导致重复创建元素,而非更新已有TextBlock内容
  • 嵌套循环逻辑混乱,重复遍历复选框多次,未按优先级顺序处理

修复方案

步骤1:统一注册复选框状态变化事件

在窗口加载时,给所有复选框绑定Checked和Unchecked事件,确保状态变化时触发更新逻辑:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    foreach (CheckBox cb in grd1.Children.OfType<CheckBox>())
    {
        cb.Checked += OnCheckBoxStateChanged;
        cb.Unchecked += OnCheckBoxStateChanged;
    }
}

步骤2:实现核心填充逻辑

定义单元格优先级顺序,收集选中的标题后,按顺序更新对应位置的TextBlock:

private void OnCheckBoxStateChanged(object sender, RoutedEventArgs e)
{
    // 定义网格单元格的优先级顺序(从左上到右下)
    var cellPriority = new (int Row, int Column)[]
    {
        (0, 0), (0, 1), (1, 0), (1, 1),
        (2, 0), (2, 1), (3, 0), (3, 1)
    };

    // 收集所有已勾选的复选框标题
    var selectedItems = grd1.Children.OfType<CheckBox>()
        .Where(cb => cb.IsChecked == true)
        .Select(cb => cb.Content.ToString())
        .ToList();

    // 遍历所有单元格,按优先级填充或清空TextBlock
    for (int index = 0; index < cellPriority.Length; index++)
    {
        // 找到对应单元格的TextBlock
        var targetTextBlock = grdSIMDUT.Children.OfType<TextBlock>()
            .FirstOrDefault(tb => 
                Grid.GetRow(tb) == cellPriority[index].Row && 
                Grid.GetColumn(tb) == cellPriority[index].Column);

        if (targetTextBlock != null)
        {
            // 填充选中标题或清空(当选中数量不足时)
            targetTextBlock.Text = index < selectedItems.Count ? selectedItems[index] : string.Empty;
        }
    }
}

关键说明

  • 预先定义cellPriority数组,明确单元格的填充顺序,确保符合需求的优先级
  • 通过OfType<TextBlock>()定位网格中已有的TextBlock,避免重复创建控件
  • 每次状态变化时重新收集选中项,确保内容实时同步
  • 处理选中数量不足的情况,自动清空剩余TextBlock

内容的提问来源于stack exchange,提问作者danielpilon22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:10:15