动态和不可变的 UIElement 数组

2024-01-10

我有一个WrapPanel其中包含多个Canvas大小相同。每个Canvas有一些UIElements (i.e. TextBox, TextBlock, Button等)作为孩子。每一个的创作Canvas(包括其UIElement儿童)和数量Canvas要创建的全部都是在运行时代码后面完成的(无 XAML)。

最初我做了以下工作,效果如下:

// declare as class properties, so all function can access them
WrapPanel wp = new WrapPanel();
Canvas[] cv = new Canvas[500];
TextBox[] tb = new TextBox[500];

// A function (e.g. a Button_Click event) that generates multiple Canvas in a WrapPanel
for (int i = 0; i<myInt; i++)
{
cv[i] = new Canvas();
tb[i] = new TextBox();
cv[i].Children.Add(tb[i]);
wp.Children.Add(cv[i]);
}

上面的代码很简单,工作正常 - 直到我实现添加,减去和销毁按钮,我可以

1. Add an additional `Canvas` on a click event
2. Remove the last `Canvas` on a click event
3. Destroy a specific `Canvas` in the `WrapPanel` on a click event (may ba a little cross icon in each `Canvas`)

如果我处理上述 3 个操作的某种组合,我可以轻松创建相同索引的 UIElements 或创建超出最初声明范围的 Canvas。

我调查了List但是,每个 Canvas 都有不同的属性(每个 Canvas 也有具有不同属性的 UIElement Children ),我不知道 List 如何解决它。我解决这个问题的一种方法是为 Canvas 声明一个超大的数组大小(例如画布[] cv = 新画布[99999]但我认为这不是很有效率。

另外,如果我使用 List,在生成特定 UIElement 后如何更改它们的属性?例如。如果我添加 10 个 Canvas 并添加到列表中,在它们全部生成后,我需要选择第 5 个 Canvas 并更改 TextBox.Text,如何像在数组中那样访问它(即 tb[5].Text =“你好”)?

谁能告诉我一些解决这个问题的方法?


只是直接翻译如何使用下面的列表来执行此操作。鉴于您的代码,我不知道为什么您想在列表中跟踪画布和文本框 - 您只需访问该列表的子集合即可WrapPanel直接代替 - 假设您现在确实需要这些单独的集合。

 WrapPanel wp = new WrapPanel();
 List<Canvas> cvList = new List<Canvas>();
 List<TextBox> tbList = new List<TextBox>();

 public void Init()
{

    int myInt = 500;
    // in a function (e.g. a Button_Click event) to generate the multiple Canvas in a WrapPanel
    for (int i = 0; i < myInt; i++)
    {
        Canvas cv = new Canvas();
        TextBox tb = new TextBox();
        cv.Children.Add(tb);
        wp.Children.Add(cv);

        cvList.Add(cv);
        tbList.Add(tb);
    }
}


public void AddCanvas()
{
    Canvas cv = new Canvas();
    TextBox tb = new TextBox();
    cv.Children.Add(tb);
    wp.Children.Add(cv);
    cvList.Add(cv);
    tbList.Add(tb);
}

public void RemoveCanvas()
{
        wp.Children.RemoveAt(wp.Children.Count-1);
        cvList.RemoveAt(cvList.Count - 1);
        tbList.RemoveAt(cvList.Count - 1);
}

Edit添加评论:

例如。如果我添加 10 个画布,然后 它们都是生成的,我需要 选择第五个画布并更改 TextBox.Text,我如何访问它 我在数组中做了(即 tb[5].Text = “你好”)?

您可以直接访问孩子们。你知道你只添加了Canvas元素给你的WrapPanel。所以你可以做(​​wp 是WrapPanel again):

TextBox textbox = (wp.Children[5] as Canvas).Children[0] as TextBox;
textbox.Text = "Hello";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态和不可变的 UIElement 数组 的相关文章

随机推荐

  • Facebook 示例拼图:河内塔

    这是 Facebook 招聘样本测试中的一个问题 有 K 个钉子 当从桩的底部到顶部观察时 每个桩可以按半径递减的顺序容纳圆盘 有N个圆盘 半径为1到N 给定钉子的初始配置和钉子的最终配置 输出从初始配置转换到最终配置所需的移动 您需要以最
  • pandas 混合位置和标签索引,无需链接

    Since ix已经自 Pandas 0 20 起已弃用 http pandas docs github io pandas docs travis whatsnew html deprecate ix 我想知道在 Pandas 中混合基于
  • 是否可以调整嵌入的 .mov 的大小?

    我嵌入的 mov 剪辑有时比显示它的位置大 所以我想调整剪辑的大小 曾尝试过width and height但这只会改变显示它的区域 它不会调整实际电影的大小 可以调整影片大小吗 如果是 怎么办 是的 您需要scale属性 有 QuickT
  • 如何从aspx页面中抓取图像?

    我在尝试着scrape来自 aspx 页面的图像 我有这段代码 可以从普通网页中抓取图像 但无法抓取 aspx 页面 因为我需要将 http post 请求发送到 aspx 页面 即使在阅读了几个线程之后 我也不知道如何做到这一点是原来的代
  • 使用蓝牙 LE 在 iOS 和 Android 之间进行通信

    我有一个工作应用程序 使用 CoreBluetooth 在 iPad 中央 和 iPhone 外围 之间进行通信 我有一项服务有两个特点 我的 Nexus 7 运行最新的 Android 4 3 支持 BTLE Android 加入 BTL
  • 给定中序和后序遍历,如何输出树的前序遍历?

    给出当我在整数数组中具有先序和中序遍历时输出树的后序遍历的代码 如何使用给定的中序和后序数组来类似地获取前序 void postorder int preorder int prestart int inorder int inostart
  • 手势字符识别

    I use Dio dictionary function gesture on screen get text to search Library that in Android can make to be the function o
  • 如何使用 SI 符号格式化 noUiSlider 的刻度标签?

    这是我的 noUiSlider 的样子 我想将刻度标签格式设置为 1000 gt 1K 900000 gt 900K 5000000 gt 5M 等 即用适当的 SI 符号缩写数字 library shiny library shinyWi
  • function '<-'/2 undefined 接收块中出现错误 Elixir

    这是我的 Elixir 代码 defmodule ErlProcess do def receiver do receive do sayHello msg gt sender lt ok ok end end end 但它给出了这个错误
  • NVM无法在ubuntu 18.04上安装nodejs

    我尝试在 ubuntu 18 04 上使用 nvm 安装nodejs 但每次它都会抛出以下错误堆栈 pasindu pasindu HP EliteBook 850 G7 Notebook PC nvm install 0 10 35 Do
  • 关于端点接口的 jax-ws

    使用注释定义了 Java 接口 网络服务编译了代码 一切顺利 Example WebService public interface HelloWorldIfc 现在我尝试将端点接口定义为 WebService endpointInterf
  • 是否有一个简单的 Bugzilla/Trac 客户端供非软件人员使用?

    我知道这不完全是一个编程问题 但它直接影响我们的开发人员和我们分配编写的代码 如果有另一个类似的论坛可以更好地发布这个问题 请告诉我 我会从这里记下这个问题并将其发布到那里 我们的工作环境是几个开发人员为工厂生产车间创建 20 30 和维护
  • JavaFX 项目结构

    JavaFX 使用 FXML 的 MVC 模型听起来很棒 但我在找出如何组织我的项目包时遇到了困难 我发现的关于 JavaFX 的每一个教程都太简单且无组织 他们只是创建一个包并在那里创建所有内容 每个控制器 每个 fxml 每个 css
  • 如何在属性文件的数值中包含 _ ?

    我怎样才能拥有 下划线 在我的数值属性中 同时注入 ValueSpring中的注解 如果我包括 按照我的价值观 Spring 会抛出TypeMismatchException properties 文件 min score 20 000 j
  • 编译器:理解小程序生成的汇编代码

    我正在自学编译器是如何工作的 我正在通过阅读反汇编来学习GCC从小型 64 位 Linux 程序生成代码 我写了这个C程序 include
  • Rails 4 - 仅当当前密码正确时才允许更改密码

    在我的应用程序中 用户可以编辑他们的个人资料信息 在编辑个人资料表单上 用户可以更改所有字段 姓名 职务等 在同一个表单上有三个字段 current password password and password confirmation 我
  • C# 中的值类型类定义?

    是否可以创建一个不是结构而是值类型的类 或者类似于值类型 因为它在传递时进行复制而不是通过引用传递 edit 抱歉 问题在提出后必须进行编辑 另外 请参阅此问题以获取更多信息 在不存在的struct布局中循环 https stackover
  • Java,在多线程环境中通过哈希统一划分传入的工作

    我已经实现了一个java代码来执行传入的任务 如Runnable 具有基于 hashCode 模块的 n 个线程nThreads 理想情况下 工作应该在这些线程之间均匀地分布 具体来说 我们有一个dispatchId作为每个任务的字符串 这
  • 防止在 Shiny 中对应用程序加载执行观察

    在 Shiny 中 观察语句在应用程序加载时运行 我想在某些情况下阻止这种情况 例如 我可能有两个标题 我想以某个值启动 并且在应用程序加载后我希望它们同步 在下面的代码中 如果运行它 标题将无限循环更新 因为应用程序会立即更新一个标题 然
  • 动态和不可变的 UIElement 数组

    我有一个WrapPanel其中包含多个Canvas大小相同 每个Canvas有一些UIElements i e TextBox TextBlock Button等 作为孩子 每一个的创作Canvas 包括其UIElement儿童 和数量Ca